Собственные JSF-компоненты с несколькими полями ввода

У меня гораздо более сложная проблема, но я стараюсь привести ее к минимальному примеру, который демонстрирует основные вещи.

Мой BeanClass управляет некоторым Entity/POJO, где этот POJO снова содержит некоторые другие Entities/POJO

public class MyEntityA implements Serializable {
   String attributA;
   MyEntityB b;
   // Getter .. Setter
}

public class MyEntityB implements Serializable {
    String attributB
   // Getter .. Setter
}

В моем JSF мне нужны поля ввода для всех атрибутов, таких как

<p:inputTextarea value="#{myBean.entityA.attributeA}" />
<p:inputText value="#{myBean.entityA.b.attributeB}" />

Вместо этого я хочу написать что-то похожее на

<my:custom property="#{myBean.entiyA}" />

Используя собственный файл тегов facelet, я должен назначить каждый отдельный атрибут, который я хочу изменить, поэтому я получаю выгоду от неудовлетворенности, потому что я должен касаться каждого из моих тегов, если меняются мои EntityClasses. И это один момент, который я хочу избежать.


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


Можно ли добиться этого с помощью пользовательского компонента и обработчика тегов? Или это даже более простой способ? Как может выглядеть решение для моего короткого примера с использованием пользовательского компонента и обработчика тегов?


В конце концов я должен как-то зациклить эти компоненты.

 <c:forEach var="item" items="#{myBean.entityACollection}">
       <my:custom property="#{item}"/>
 </c:forEach>

должно быть так же, как я пишу что-нибудь вроде

 <p:inputTextarea value="#{myBean.firstEntityA.attributeA}" />
 <p:inputText value="#{myBean.firstEntityA.b.attributeB}" />
 <p:inputTextarea value="#{myBean.secondEntityA.attributeA}" />
 <p:inputText value="#{myBean.secondEntityA.b.attributeB}" />
 <p:inputTextarea value="#{myBean.thirdEntityA.attributeA}" />
 <p:inputText value="#{myBean.thirdEntityA.b.attributeB}" />
 ...

Если вам нужна дополнительная информация или есть проблемы с пониманием моего вопроса, пожалуйста, сообщите!

Я использую PrimeFaces 4.0 иMojarra 2.1.26

0 ответов

Другие вопросы по тегам