创建不同类型的参数化primefaces组件

时间:2014-07-29 07:34:11

标签: jsf primefaces

在我的JSF webapp中(使用primefaces 5.0),我在不同的页面上有多个非常相似的输入表单来编辑从名为DataContainer的抽象类派生的实体:

public abstract class DataContainer<ValueType>{

   ValueType val; // Generic type for the value
   //...
}

一个可能的子类是:

public class IntegerContainer extends DataContainer<Integer>{
   public Type getType(){
     return Type.NUMBER; // Type is an enum to determine the type during runtime.
   }
   // ...
}

在前端,我想使用不同的PF组件来编辑不同的数据类型(因此,DataContainer的不同子类):例如。数字为p:spinner,文字为p:input

我目前的方法是使用组件的rendered属性,为真或假,具体取决于Type与我的枚举相比返回的实际getType()({ {1}}):

Type.*

不同的页面正在使用不同的PM - 所以任何时候我需要编辑<p:dataGrid ... var="entity"> <p:spinner value="#{anyPM.intValue"} rendered="#{entity.type eq Type.NUMBER}" /> <p:inputText value="#{anyPM.stringValue}" rendered="#{entity.type eq Type.TEXT} /> </dataGrid> 类型的实体我写下相同的表格只是替换PM的名称。

有没有办法动态生成上面的dataGrid内容(比如将其作为模板包含并按参数设置PM)? 其他建议,以避免我的xhtml中几乎重复的代码?

1 个答案:

答案 0 :(得分:0)

也许你可以看一下PrimeFaces Extensions DynaForm - &gt; http://www.primefaces.org/showcase-ext/views/dynaForm.jsf