Struts 迭代器在另一个迭代器中

Struts Iterator Inside another Iterator

我有一个列表,里面有另一个列表。我试图在 jsp 到 struts 中显示,但我不能。这是我的代码

<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>

显示的是 parent 姓名,而不是 child 姓名。我试图在前往 jsp 之前显示 children 姓名,它正在登录 java。我试图搜索此解决方案,但答案并没有解决我的问题。 这是我的 parent class.

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

  // Getter setter
}

这是child仁class

class Children{
  private String childrenName;

  // Getter setter
}

我的代码有什么问题?

应该可以。

一些小的更正和建议:

  • 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>

编辑

  • 确保您已生成正确的 Getters 和 Setters。 Eclipse 以 Struts2 不喜欢 .
  • 的方式生成它

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

s:iterator id="children" value="children" var="children_list_var">
    <s:property value="#children_list_var.childrenName"/>
</s:iterator>

看看这个 link 以更好地了解正在发生的事情 https://struts.apache.org/docs/ognl-basics.html

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

它的作用是获取列表中的当前子对象和 return 子名称变量。我认为这是一个关于如何解决它的回合,但如果其他答案不起作用,那应该会得到你想要的