我遇到的问题要复杂得多,但我试着把它分解成一个展示主要内容的最小例子 .
我的BeanClass正在管理一些实体/ POJO,其中此POJO再次包含一些其他实体/ POJO
public class MyEntityA implements Serializable {
String attributA;
MyEntityB b;
// Getter .. Setter
}
public class MyEntityB implements Serializable {
String attributB
// Getter .. Setter
}
在我的JSF中,我需要所有attributs的输入字段
<p:inputTextarea value="#{myBean.entityA.attributeA}" />
<p:inputText value="#{myBean.entityA.b.attributeB}" />
而不是这个我真的想写一些类似的东西
<my:custom property="#{myBean.entiyA}" />
使用自己的 facelet tag file 我必须分配我想要改变的每个属性,所以我将获得的好处是不满意,因为如果我的EntityClasses改变,我必须触摸我的每个标签 . 这是我想避免的一点 .
使用 composite component 我遇到的问题是,它是作为单个组件呈现的,但如果我想使用它,则会破坏我的页面的整个设计,例如在panelGrid中 .
是否有可能通过 Custom Component 和 Tag Handler 实现这一目标?或者是他们甚至更简单的方式?使用自定义组件和标记处理程序时,我的简短示例的解决方案怎么样?
最后,我必须以某种方式循环这些组件 .
<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