是将参数传递给行动的正确方法

时间:2015-06-25 04:51:59

标签: jquery ajax struts2

我在S2中实施考勤表。我需要在三个(P,A,L)中只选择一个复选框。如果需要,用户可以一次选择全部。最后他们会参加。所有这些都完成了。请参阅下图以便完全理解。

enter image description here

点击按钮后,我进行了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

1 个答案:

答案 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