在我的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中几乎重复的代码?
答案 0 :(得分:0)
也许你可以看一下PrimeFaces Extensions DynaForm - &gt; http://www.primefaces.org/showcase-ext/views/dynaForm.jsf