我在S2中实施考勤表。我需要在三个(P,A,L)中只选择一个复选框。如果需要,用户可以一次选择全部。最后他们会参加。所有这些都完成了。请参阅下图以便完全理解。
点击按钮后,我进行了Ajax调用。因此,所选值将被发送到动作类,如 P ## 1,L ## 2,P ## 3,L ## 4,P ## 5,P ## 6,A ## 7,P# #8,A ## 9,P ## 10 即可。在动作类中,我会在处理请求时将其拆分。是传递参数的正确方法。你能否告诉我这是其他任何解决办法。
在JSP中
<s:iterator value="listOfEmployees">
<s:property value="%{empCode1}" />
<s:checkbox name="somename%{empCode}" fieldValue="P##%{empCode}" theme="simple" cssClass="first"/>
<s:checkbox name="somename%{empCode}" fieldValue="A##%{empCode}" theme="simple" cssClass="second"/>
<s:checkbox name="somename%{empCode}" fieldValue="L##%{empCode}" theme="simple" cssClass="third"/>
</s:iterator>
在JS中,点击按钮后,所有选中的值都会出现。在下面的行我得到了上面的参数。 1,2等是Ids(假设)和P - 等等。
values+=$(this).val()+",";//now values=P##1,L##2,P##3,L##4,P##5,P##6,A##7,P##8,A##9,P##10
xmlhttp.open("GET","actionname.action?ids="+values,true);//call action
答案 0 :(得分:2)
在将查询字符串发送到服务器之前对其进行编码是明智的,特别是因为您的哈希符号(#
)会被误解为片段。
以下是使用encodeURIComponent()(将编码哈希符号)的一种可能解决方案:
xmlhttp.open("GET","actionname.action?ids="+encodeURIComponent(values), true);
然后您将发送如下参数:
actionname.action?IDS = P%23%231%2CL%23%232%2CP%23%233%2CL%23%234%2CP%23%235%2CP%23%236%2CA%23%237 %2CP%23%238%2CA%23%239%2CP%23%2310
在服务器端你可以urldecode()像这样(在PHP中):
<?php
echo urldecode( $_GET["ids"] );
或(在JSP中):
URLDecoder.decode(Request.getQueryString(), 'UTF-8')
回来
P ## 1,L ## 2,P ## 3,L ## 4,P ## 5,P ## 6,A ## 7,P ## 8,A ## 9,P ## 10
(注意:我不熟悉JSP,所以这里有关于解码查询字符串的更详细信息:How do I correctly decode unicode parameters passed to a servlet)