2011-12-15 73 views
0

我有一个遍历列表并创建他们的名字并为他们每个人一个按钮的迭代器。我想,当用户点击按钮,就可把已单击会话名称相同 这是我的代码在Struts中点击Submit按钮时设置变量

 <s:iterator value="packageCities" status="portStatus"> 
      <tr> 
       <td> 
        <s:property value="cityName" /> 
       </td> 
      </tr> 
      <s:if test="%{status == 0}"> 
       <tr> 
        <td> 
         <s:submit method="open" align="center" value="" cssStyle="background: transparent url(image/open.png) no-repeat center top; border: 0px; width: 150px; height: 30px;" > 
          <s:set name="button" value="cityName" scope="session"/> 
         </s:submit> 
        </td> 
       </tr> 
      </s:if> 
     </s:iterator> 

但问题是它只设置了最后一个属性,它不设置它时用户点击了按钮!所以它就像创建按钮时将城市名称放在会话中一样!但我只想通过点击不同的按钮来放置不同的东西! 任何身体都可以帮忙吗?

回答

1

有两个解决方案:

  1. 与形式(一个隐藏的字段可以被用于此目的)沿提交的值。然后在动作类中设置会话变量。
  2. 进行同步ajax请求,通过点击提交按钮来设置会话值。

由于Dave在jsp加载时已经提到,这些值已经被设置,所以你不能在客户端修改它们。

编辑

好了,按照您的要求,这里是第一种方法的基本思想。我们的想法是要设置提交按钮的ID与各自cityName然后的onclick按钮调用JavaScript函数来设置一个隐藏字段的值与所单击按钮的id(即其cityName

<s:form> 
<s:hidden id="value_to_submit" name="value_to_submit"/> 
<s:iterator value="packageCities" status="portStatus"><s:form> 
    .... 
       <s:if test="%{status == 0}"> 
        <tr> 
         <td> 
          <s:submit id="%{cityName}" onclick="set_hidden_value(this.id)" method="open" align="center" value="" cssStyle="background: transparent url(image/open.png) no-repeat center top; border: 0px; width: 150px; height: 30px;" > 
          </s:submit> 
         </td> 
        </tr> 
       </s:if> 

    </s:iterator> 
</s:form> 

的Javascript

function set_hidden_value(myvalue){ 
document.getElementById("value_to_submit").value=myvalue; 
} 

现在,您可以在动作类中捕获变量value_to_submit的值,并在其中设置会话变量。

+0

您能否请给我一个关于第一个解决方案的例子? – Khashayar 2011-12-16 12:36:14

0

两个问题。

一,名称总是相同的,所以你总是设置相同的属性。

两个,更重要的是,JSP在到达浏览器时执行了所有的JSP标记 - 这不是按钮单击时设置会话变量的方式。

会话变量需要在处理提交的操作中设置。

+0

cityName是列表Packagecities的不同值!它在我的班上!但是如何在点击按钮时设置会话!? – Khashayar 2011-12-15 17:46:57