Обработка сложных бобов в JSF - PullRequest
0 голосов
/ 07 мая 2009

Давайте посмотрим на эту структуру компонента, например:

public class Abean {
   private Bbean b;
}

public class Bbean {
   private ArrayList<Cbean> c;
}

public class Cbean {
   private ArrayList<Dbean> d;
}

public class Dbean {
    ....
}

Так что в основном Abean содержит все. Теперь я хочу сделать JSP для всех этих bean-компонентов, где, например, пользователь может сказать, сколько Cbean он / она хочет в Bbean. Поэтому моя проблема в том, что я хочу автоматически показывать форму для всех «дочерних» экземпляров, например: на d.jsp я хочу показать форму для каждого Dbean внутри Cbeans.

Я пытался вставить <h:dataTable> -s, но безуспешно. Любая помощь или мысль будут оценены. Я надеюсь, что мое объяснение было ясным.

Спасибо заранее, Daniel

Ответы [ 3 ]

1 голос
/ 07 мая 2009

Я предполагаю, что, поскольку вы используете JSP, вы не используете Facelets?

Если бы вы были, то вы могли бы воспользоваться и вручную создать таблицу с вложенными таблицами.

например.

<table> 
<ui:repeat value="#{myCBEan.d}" var="myDBean">
   <tr>
      <td><h:outputText value="#{myDBean.someText}"/></td>
   </tr>
</ui:repeat>
</table>

С другой стороны, Richfaces имеет a4j: повтор , который делает то же самое и, несомненно, может использоваться с JSP. Также Richfaces имеет rich: subTable , который можно использовать для вложения таблиц.

1 голос
/ 07 мая 2009

Вложение dataTables, как правило, не очень хорошая идея. С такими глубокими структурами данных вы можете получить итерацию O (n ^ 4) для дочерних элементов управления, что может иметь последствия для производительности. Стандартный элемент управления dataTable довольно примитивен. Лучшим подходом было бы использовать какую-либо форму master / detail design или написать собственный элемент управления дерева. Поскольку для написания пользовательского элемента управления требуется детальное понимание архитектуры JSF, вы можете сначала обратиться к сторонним библиотекам JSF, чтобы узнать, сможете ли вы найти тот, который соответствует вашим потребностям.

0 голосов
/ 07 мая 2009

Я не уверен, что это решит вашу проблему, но, например, в вашем CBean, если у вас есть получатель для списка "d", вы можете использовать JSTL для перебора DBean в вашем CBean.

<c:forEach items="#{myCBean.d}" var="myDBean">
    <h:form>
        <!-- example form content -->
        <h:outputText value="#{myDBean.someText}"/>
        <h:inputText value="#{myDBean.exampleInput}"/>
        <h:commandButton value="#{myDBean.anAction}"/>
    </h:form>
</c:forEach>
...