2015-07-02 3 views
2

У меня есть список, внутри которого у меня есть другой список. Я пытался отображать в jsp через стойки, но я не мог. Это мой кодStruts Iterator Внутри другого итератора

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

Что случилось с моим кодом?

+1

Вы просмотрели http: // stackoverflow.com/questions/2327466/struts-2-nesting-iterators Также сложно сказать без кода – gcalex5

+0

@ gcalex5 Я пробовал это, но это не решило мою проблему –

ответ

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> 

EDIT:

  • Убедитесь, что у вас есть роды правильные Геттеры и Сети. Eclipse генерирует его так, что Struts2 не нравится, когда the first word is one-letter long.
+0

Да, я нашел конструктор, но его в родительском классе. Я не дал конструктора arg, поэтому он должен работать правильно? Но все еще не работает –

+0

Я удалил эту часть ответа, потому что это имеет смысл при отправке данных из JSP в действие, но оно не используется при чтении данных из действия в JSP (это ваш случай). Я подозреваю, что у вас есть кое-что опечатка. Можете ли вы опубликовать реальный код или это конфиденциальные данные? –

+0

Да, это конфиденциальные данные. Я проверил опечатку, но я не думаю, что это проблема. –

0

Поскольку ваш родительский объект имеет список детей объекты, которые вы должны сказать Struts, что пример детей, которые вы хотите, чтобы вы должны изменить ребенок итератор на что-то вроде этого

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

Берет посмотрите на эту ссылку, чтобы получить лучшее представление о том, что происходит на https://struts.apache.org/docs/ognl-basics.html

Edit: предполагая, все правильно отображается, то я хотел бы посмотреть на ваши геттерных методы/инкубационные и убедитесь, что он бил правильный один. Еще одна вещь, которую вы можете попробовать - добавить переменную в свой итератор, чтобы убедиться, что вы захватываете правильный экземпляр. с чем-то вроде моего приведенного выше примера кода, который я изменил.

Что это значит, это захватить текущий объект-потомк в списке и вернуть переменную имени детей. Я думаю, что это круто об этом, но это должно получить то, что вы хотите, если другой ответ не работает.

+0

Родитель нажимается на стек ценностей при повторении. ссылаясь на детей, ссылается на дочерние элементы текущего родительского элемента, итерации, нет необходимости указывать его. –

+0

Я попробовал, но он не работает. –

Смежные вопросы