在struts 2中将表单中的可变数量的参数传递给action

时间:2012-06-05 15:53:33

标签: java jsp struts2 struts-action

我在我的应用程序中使用struts2并在jsp中有一个表单,该表单被提交给一个动作类。

表单中的输入字段数量可能会在运行时发生变化,因此操作类不能为参数设置固定的setter和getter。我试图在一个动作类中捕获这些可变数量的输入。我想知道它是否可以通过Struts 2,如果它是如何做到的?我知道表单中的输入字段名称(输入字段名称通过jsp表单中的迭代器填充)。

注意:1)我知道通过操作类中所有表单值的相应getter和setter捕获操作类中的表单值(参数)的方法。 2)我已经完成了struts 2 http://struts.apache.org/2.3.1/docs/model-driven.html

中描述的模型驱动操作

我无法获得任何搜索解决方案,我们非常感谢您的帮助。

表格人口代码:

<s:form action="/reports/getReport.action" cssClass="table_with_padding">
   <s:iterator value="reportParamsList.items" id="paramList_item">
       <tr><td><s:property value="#paramList_item.paramdesc" /></td><TD><s:textfield name="#paramList_item.paramname" /></TD></tr>
    </s:iterator>
    <s:submit theme="ajax" loadingText="%{getResource('SiteWide.Loading.Text')}" targets="app_area" type="button" align="left" cssClass="app_form_button" value="Submit" />
</s:form>

3 个答案:

答案 0 :(得分:0)

只需在表单中使用List并绑定data with list on view

即可

答案 1 :(得分:0)

对于变量参数我不认为Struts2有任何内置功能,而是在提交表单之前,将所有变量参数的值保存在某些字段中,如分隔字符串,然后将其发送到您的Action。

在Action中,您可以解析分隔的String并获得结果。

您可以使用s:hidden来保留分隔值

答案 2 :(得分:0)

对所有name和相应的textfields字段使用相同的hidden属性来识别

<s:iterator value="reportParamsList.items" id="paramList_item">
       <tr>
           <td>
               <s:property value="#paramList_item.paramdesc" />
           </td>
           <td>
                <s:textfield name="element" />
                <s:hidden name="myValue" value="#paramList_item.paramname" />
           </td>
       </tr>
</s:iterator>

然后在你的动作类中声明这些变量及其getter / setter

private List<String> element;
private List<String> myValue;

现在,您可以遍历myValue列表并获取其相应的textfield

Iterator<String> it = myValue.iterator();
int index = 0;
while(it.hasNext()){
 System.out.println("hidden field's value="+it.next());
 System.out.println("textfield's value="+element.get(index));
 index++;
}