在挂毯中使用 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;
}
});
<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;
}
});