0

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

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

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

我已经将我的代码与进行了比较,尽管它们似乎相同,但我的却不起作用。

形式

   <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
4

2 回答 2

-1

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

您可以使用JavaScript 更改操作名称。通过这样做,您可以使用 struts.XML 将 jsp 映射到另一个类。您所需要的只是Struts.XMl中的新动作定义。

在 bean 类中,您只需创建一个具有列表名称且类型相同的变量,最后创建 Getter 和 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 类内部(动作)

private List<String> lstVariablename;

/....Getters and Setters............
于 2013-08-23T09:47:59.940 回答
-1

似乎您无法将集合传递给其他操作,需要使用会话或字符串类型的变量。看看下面的答案

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

于 2013-08-22T02:44:38.790 回答