如何在动作之间传递List类型的参数?

时间:2013-08-22 01:12:26

标签: java struts2

我有一个只有一个复选框的表单,用户需要选择一些选项并选择一个提供的按钮。其中两个按钮应将所选选项返回到触发页面的同一操作(第一个操作),另一个按钮需要将选项发送到另一个操作(下一个操作)。

由于我无法为单个复选框定义两个单独的表单,目前我将所有按钮重定向到First Action并尝试从那里重定向到Next Action。因此,我使用param标签传递所需的变量,但我无法在第二次操作中访问它。

目标是为一个复选框设置三个单独的提交按钮。

我已将我的代码与this进行了比较,虽然它们似乎相同,但我的代码不起作用。

表格

   <form name="FirstActionFrom" method="POST" action="doActions">
             Check box goes here
      <input id="ThisBtn1" type="submit" name="req" value="This1"/>&nbsp
      <input id="ThisBtn2" type="submit" name="req" value="This2"/>
      <input id="NextBtn" type="submit" name="req" value="Next"/>
   </form>

第一行动:

.....
private List<Long> selectedOptions;
{ 
    System.err.println("size of options:" + this.selectedOptions.size()); 
  if req is equal to Next then
      return "NextAction"
  else do whatever is required
}

 getter and setter go here
}

struts.xml中

 <result name="NextAction" type="redirectAction">
                <param name="actionName">NextAction</param>
                <param name="namespace">/Users/Next</param>
                <param name="selectedOptions">${selectedOptions}</param>
 </result>

下一步行动

.....
private List<Long> selectedOptions;

... { 
  System.err.println("size of options:" + this.selectedOptions.size()); <<Always shows Zero
  return "showThis"
}

 getter and setter go here
}

选择单个选项后的结果

SEVERE : size of options:1
SEVERE : size of options:0

2 个答案:

答案 0 :(得分:-1)

似乎你无法将集合传递给其他操作,需要使用会话或字符串类型的变量。请查看以下answer

我建议不要使用会话或类型字符串变量,而是从第一个操作中调用下一个操作的方法,并在完成所有计算后,将重定向请求发送到其他方法以返回其结果页面。

答案 1 :(得分:-1)

可以通过JSP页面中更改表单操作轻松完成。

  

您可以使用 JavaScript更改操作名称。通过这样做,你可以映射   jsp使用struts.XML到另一个类。您只需要 Struts.XMl。

中的新操作定义      

在bean类中,你就是这样   想要创建一个带有列表名称和相同类型的变量,最后   创建Getters和setter。你将获得所有的价值   bean中的jsp,( ,无论类型 )(struts为你映射值)。

因为你已经说过你已经在一个动作中得到了列表。我没有进入那个部分。

现在,您可以从JSP中重定向bean类(Action)。

Jsp文件

    <s:form id="formid" action="action1">
/.../
<s:hidden name="lstVariablename"/>
<s:hidden name="lstVariablename"/>
<s:hidden name="lstVariablename"/>
<s:hidden name="lstVariablename"/>
/.../
    </s:form>

现在在JSP中创建一个JavaScript函数

<script>    
function changeAction(){
    document.formid.action =action2
    }
</script>

<强> struts.xml中

  <action name="action1" 
        class="com.XXX.Action1" 
        method="methodOfAction1">
        <result name="success">/name.jsp</result>
  </action>

  <action name="action2" 
        class="com.XXX.Action2"  
        method="methodOfAction2">
        <result name="success">/name.jsp</result>
  </action>

Bean类(Action)内部

private List<String> lstVariablename;

/....Getters and Setters............