我在应用程序中使用 struts2,并在 jsp 中有一个表单,该表单已提交给操作类。
表单中的输入字段数量在运行时可能会有所不同,因此操作类不能为参数提供固定的 setter 和 getter。我正在尝试在单个操作类中捕获这些可变数量的输入。我想知道它是否可以通过 Struts 2 实现,如果是,我该怎么做?我知道表单中的输入字段名称(通过 jsp 表单中的迭代器填充的输入字段名称)。
注意:1)我知道通过适当的getter和setter为动作类中的所有表单值捕获表单值(参数)的方法。2)我已经完成了支柱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>
只需在表单中获取List
并将数据与视图上的列表绑定
对于变量参数,我认为 Struts2 没有任何内置功能,相反,在您提交表单之前,您将所有变量参数的值保存在某个字段中,例如分隔字符串,然后将其发送到您的操作。
然后,在操作中,您可以解析分隔的字符串并获取结果。
您可以使用s:hidden
来保存分隔值
对所有textfields
使用相同的name
属性,并使用相应的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++;
}