タペストリーは、URL内で独自のパラメーターのエンコードを実行しますが、クライアント側にはレプリカがありません。
org.apache.tapestry5.internal.services.URLEncoderImpl.encode(String)を参照してください
「helloworld」が期待どおりに機能する理由は、「特殊文字」がないため、エスケープされた値は「helloworld」と等しくなるためです。
したがって、タペストリーを使用して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;
}