使用JSP页面映射列表并在Action类中获取值。它将结果列表作为Action类中的笛卡尔积

时间:2014-10-15 12:10:37

标签: java jsp arraylist struts2 ognl

我正在开发一个项目,我必须以List的形式将数据从JSP页面发送到action类,我在第一次从JSP页面映射时从动作类设置List<Object>当我为保存细节而采取行动时,我会得到List<Object>的值,就像每个值的笛卡尔积一样。

e.g。如果有3个对象列表(有4个成员字段)传递给JSP,则返回操作时会生成12个具有不同JSP值的对象。

图像显示演示UI,它不是表格,但每行代表列表的对象

The image shows the Demo UI which I need
在动作类

 List<Pojo> PojoList = new ArrayList<Pojo>();

任何人都可以建议我应该使用什么方法,这对我来说是新的方案,我也尝试过一些来自互联网的例子但是没有成功,我也在JSP中迭代列表但是它给了我一个错误。(不完全是错误但它没有给JSP上的字段;

在JSP中:

<c:forEach var="pojo" items="${pojoList}">
    <s:textarea name="pojo.field1">
    <s:textarea name="pojo.field2">
    <s:textarea name="pojo.field3">
    <s:textarea name="pojo.field4">
</c:forEach>

返回动作类方法(打印12个对象)

try {
    System.out.println("List : "+pojoList);
    for (Iterator<Pojo> iterator = pojoList.iterator(); iterator.hasNext();) {
        Pojo pojo = (Pojo) iterator.next();
        System.out.println("\n MB : "+pojo);
       }
} catch (Exception e) {
    e.printStackTrace();
}

请建议我哪里出错了。

1 个答案:

答案 0 :(得分:1)

如果列表中有3个pojos,那么默认情况下每个都有4个字段添加到列表中,因此3 * 4 = 12.代码工作正常,但是如果你改变它就像

<s:iterator value="pojoList" status="stat">
    <s:textarea name="pojoList[%{#stat.index}].field1">
    <s:textarea name="pojoList[%{#stat.index}].field2">
    <s:textarea name="pojoList[%{#stat.index}].field3">
    <s:textarea name="pojoList[%{#stat.index}].field4">
</s:iterator>

它将为每个字段使用相同的索引,因此将创建/更新3个pojos。