Struts迭代器在另一个迭代器

时间:2015-07-02 14:24:53

标签: java jsp struts2 iterator ognl

我有一个列表,里面有另一个列表。我试图通过struts在jsp中显示,但我无法做到。这是我的代码

<s:iterator id="parent" value="parent" status="stat">
    <s:property value="parentName"/>
    <s:iterator id="children" value="children" status="stat">
        <s:property value="childrenName"/>
    </s:iterator>
</s:iterator>

显示父名称,但不显示子名称。我试着在转到jsp之前显示子名,它是在java中登录。我试图搜索这个解决方案,但答案并没有解决我的问题。 这是我的父班。

class Parent{
  private ArrayList<Children> children;
  private String parentName;

  // Getter setter
}

这是儿童班

class Children{
  private String childrenName;

  // Getter setter
}

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:3)

它应该有用。

只是一些小的更正和建议:

    不推荐使用
  • id,请使用var。如果您的情况与示例中的情况类似,则甚至不需要它,那么只需避免使用它:
  • 同名的两个status并不好。是你和OGNL先生混淆的根源。更改名称,或避免使用其中一个或两个。
  • 最好使用接口而不是实现声明对象:

    private List<Children> children;
    

然后试试这个:

<s:iterator value="parent">
    <s:property value="parentName"/>
    <s:iterator value="children">
        <s:property value="childrenName"/>
    </s:iterator>
</s:iterator>

编辑

答案 1 :(得分:0)

由于你的父对象有一个子对象列表,你需要告诉Struts你想要的子节点的实例,所以你需要将子迭代器更改为这样的

event.end

请查看此链接,以便更好地了解正在发生的事情 https://struts.apache.org/docs/ognl-basics.html

编辑:假设所有内容都已正确映射,那么我会查看你的getter / setter方法并确保它能够正确映射。您可以尝试的另一件事是向迭代器添加一个变量,以确保您正在抓取正确的实例。与我上面的代码示例相似,我改变了。

这样做是抓取列表中的当前子对象并返回子名称变量。我认为这是一个关于它的方式,但如果另一个答案不起作用,这应该得到你想要的