Tapestry 在 url 中执行自己的参数编码,在客户端没有副本。
见org.apache.tapestry5.internal.services.URLEncoderImpl.encode(String)
“helloworld”按预期工作的原因是没有“特殊字符”,所以转义值无论如何都等于“helloworld”。
因此,您要么需要使用 Tapestry 通过 java 对 json 进行编码,要么需要URLEncoder
编写客户端副本。
也就是说,如果我正确理解你的问题。
编辑我很无聊,所以我写了客户端副本:
/**
* see org.apache.tapestry5.internal.services.URLEncoderImpl.encode(String)
* correct as at tapestry 5.3.5
*/
function tapestryUrlEncodeParameter(input)
{
var safe = "abcdefghijklmnopqrstuvwxyz"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "01234567890-_.:";
if (input === null)
return "$N";
input = input.toString();
if (input === "")
return "$B";
var output = "";
for (var i = 0; i < input.length; i++)
{
var ch = input.charAt(i);
if (ch === '$')
{
output += "$$";
continue;
}
if (safe.indexOf(ch) != -1)
{
output += ch;
continue;
}
var chHex = ch.charCodeAt(0).toString(16);
while (chHex.length < 4)
chHex = "0" + chHex;
output += "$" + chHex;
}
return output;
}