Struts 2 вложенных итератора - PullRequest
8 голосов
/ 24 февраля 2010

Я не могу поверить, что что-то такое простое может показаться таким сложным в Struts 2.

Это примерно то, что я хотел бы сделать, как это было бы сделано в Java.

for (Parent parent : parents){
  for (Child child: parent.getChildren()){
     System.out.println(child.getName());
  }
}

Это должно означать что-то похожее на теги Stuts:

<s:iterator var="parent" value="parents">
  <s:iterator var="child" value="parent.children">
     <s:property value="child.name"/>
  <s:iterator>
<s:iterator>

Я предполагаю, что parent.children должен быть чем-то вроде $ {% (# parent.children)}, но я не нашел правильной комбинации $ {% (# символов для использования :-). Я мог бы также использовать ссылку на страницу, объясняющую, когда использовать какую из них.

Ответы [ 4 ]

12 голосов
/ 25 февраля 2010

Попробуйте это:

<s:iterator var="parent" value="parents">
    <s:iterator var="child" value="#parent.children">
        <s:property value="#child.name"/>
    <s:iterator>
<s:iterator>
4 голосов
/ 26 февраля 2010

у меня работает:

<s:iterator value="parents">
    <s:iterator value="children">
        <s:property value="name" />
    </s:iterator>
</s:iterator>
1 голос
/ 16 февраля 2011

Вот так будет выглядеть код JSP:

    <s:form action="saveaction" >
        <s:iterator value="lstBean" id="lstBean" status="outerStat">
            <s:textfield value="%{name}" name="lstBean[%{#outerStat.index}].name"/>
            <s:textfield value="%{amt}" name="lstBean[%{#outerStat.index}].amt"/>
            <s:textfield value="%{id}" name="lstBean[%{#outerStat.index}].id"/>
            <s:iterator value="%{lstString}" status="myStat">
                <s:textfield name="lstBean[%{#outerStat.index}].lstString[%{#myStat.index}]"/>
            </s:iterator>
        </s:iterator>
        <s:submit value="Click me to submit lstBean"/>
    </s:form>

Ниже следует bean-компонент (XBean), список которого используется в JSP:

public class XBean
{    
private ArrayList<String> lstString=new ArrayList<String>();
private String name;
private Double amt;
private Integer id;
//Getters and setters of fields
}

Теперь вы можете просто иметь поле lstBean с установщиками в вашем действии отправки (saveaction) и эй, вы сделали.

0 голосов
/ 23 октября 2014

Для Struts 2.3.x вы можете использовать этот пример, извлеченный из http://struts.apache.org/release/2.3.x/docs/iterator-tag-examples.html

В этом примере «страны» - это список объектов страны, каждый из которых имеет название и список городов. У каждого города есть имя.

<s:iterator value="countries">
    <s:iterator value="cities">
        <s:property value="name"/>, <s:property value="[1].name"/><br>
    </s:iterator>
</s:iterator>

Они относятся к определенной позиции в стеке: '[1]'. Вершина стека, позиция 0, содержит текущий город, помещенный внутренним итератором; позиция 1 содержит текущую страну, выдвинутую внешним итератором.

...