拥有多个输入字段的JSF组件

时间:2014-03-25 16:35:53

标签: java jsf jsf-2 facelets composite-component

我遇到的问题要复杂得多,但我试着把它分解成一个展示主要内容的最小例子。

我的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标记文件我必须分配我想要更改的每个属性,因此我将获得的好处是不满意,因为我必须触摸我的每一个标签,如果我的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 个答案:

没有答案