在struts 2中将可变数量的参数从表单传递到动作

Posted

技术标签:

【中文标题】在struts 2中将可变数量的参数从表单传递到动作【英文标题】:Passing variable number of parameters from form in to action in struts 2 【发布时间】:2012-06-05 15:53:32 【问题描述】:

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

表单中输入字段的数量在运行时会有所不同,因此操作类不能有固定的参数设置器和获取器。我试图在单个动作类中捕获这些可变数量的输入。我想知道它是否可以通过 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>

【问题讨论】:

【参考方案1】:

只需在表单中取一个List 并绑定data with list on view

【讨论】:

即使使用struts.apache.org/2.3.1/docs/tabular-inputs.html,参数也是固定的(数量、注释、产品ID)。就我而言,它们是可变的。刚刚编辑了我的问题以显示表单的填充方式。【参考方案2】:

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

然后,您可以在您的操作中解析分隔字符串并获取结果。

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

【讨论】:

【参考方案3】:

对所有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++;

【讨论】:

以上是关于在struts 2中将可变数量的参数从表单传递到动作的主要内容,如果未能解决你的问题,请参考以下文章

C:将可变数量的参数从一个函数传递到另一个函数

使用 Struts 2 在项目中将查询字符串中的键值从一个页面传递到另一个页面

如何在 Struts2 中提交表单的 URL 中传递参数

在Oracle中将1传递给游标时指定可变大小

如何在 Laravel 中将变量从视图传递到控制器而不使用 URL 或表单

在 Tomcat 上拦截 j_security_check 以在 Struts 2 中将用户名修改为 LDAP