在挂毯中使用 ajax 将字符串传递到服务器端

pass string to server side with ajax in tapestry

<t:if test="needsSetName">
        <label for="userfunction">${message:setname}</label>
        <t:textfield
            t:mixins="zoneUpdater"
            tabindex="-1"
            autofocus="false"
            ZoneUpdater.clientEvent="keyup"
            ZoneUpdater.event="valueChangedSetName"
            ZoneUpdater.zone="transferZone"
            ZoneUpdater.timeout="3000"
            t:id="setName"
            value="setName"/>
    </t:if>


@OnEvent(value = "valueChangedSetName")
protected void onValueChangedSetName(@RequestParameter(value = "param", allowBlank = true) String setName)
{
    TransferOrder to = baskets.getTransferOrder();
    this.setName = setName;
    to.setComment("Rename from " + this.setName + " to " + setName);
    nextSetName = setName;
    zoneHubService.updatePendingTransfer();

    zoneHubService.addCallback(new JavaScriptCallback()
    {
        @Override
        public void run(JavaScriptSupport javascriptSupport)
        {
            javascriptSupport.addScript(
                String.format("var thing=jQuery('#%s'); thing.focus();thing[0].setSelectionRange(10000, 10000);",
                    setNameField.getClientId()));
        }
    });
}


所以我的问题是,当我在文本字段中键入一些文本时,它会删除#、&、.. 以及这些符号之后的所有其他符号
当我使用 + 时,它变成 space.
我在我的方法中从服务器获取的字符串已经是 "edited"。
我是挂毯新手 ajax,我不知道如何解决这个问题。
我必须做什么,才能在服务器不删除这些符号的情况下从服务器取回字符串?

我解决了我的问题。
在我的区域-updater.js 中,我不得不在我的字符串上使用 encodeURIComponent。
对于遇到相同问题的任何人,这里是 link 到 zoneUpdater.js 代码。
http://tinybits.blogspot.com/2010/03/new-and-better-zoneupdater.html
link我发现解决这个bug的我挂了

define([ "jquery", "t5/core/zone" ], function($, zoneManager) {

return function(elementId, clientEvent, listenerURI, zoneElementId, timeout) {
var $element = $("#" + elementId);
var mytimeout;
if (clientEvent) {
    $element.on(clientEvent, updateZone);
}

function updateZone() {
    jQuery($element).removeClass('saved');
    if (mytimeout != null) {
    clearTimeout(mytimeout);
    }
    mytimeout = setTimeout(function() {
    var listenerURIWithValue = listenerURI;
    if ($element.val()) {
        listenerURIWithValue = appendQueryStringParameter(
            listenerURIWithValue, 'param', $element.val());
        listenerURIWithValue = appendQueryStringParameter(
            listenerURIWithValue, 'element', elementId);
    }
    zoneManager.deferredZoneUpdate(zoneElementId,
        listenerURIWithValue);
    }, timeout);
}
}

function appendQueryStringParameter(url, name, value) {
if (url.indexOf('?') < 0) {
    url += '?'
} else {
    url += '&';
}
value = encodeURIComponent(value);
url += name + '=' + value;
return url;
}

});