【发布时间】:2014-09-01 15:27:44
【问题描述】:
我一直在搜索如何参数化 Managed Bean 类,但直到现在都没有。
我在做什么?
我有一个 JSF 组件可以从我的 Bean 中访问一些方法,但是这些方法已经由一个抽象类实现了。
方法和属性的名称没有改变,但是现在我在复制粘贴,只改变了 Bean 的名称。
第一个实现是可行的,但我想改进第二个。
1- 组件(现在):
...
<cc:interface>
<cc:attribute name="title" type="java.lang.String" required="true"/>
<cc:attribute name="data" type="java.util.List" required="true"/>
<cc:attribute name="columnModel" type="java.util.List" required="true"/>
<cc:attribute name="newEntity" type="java.lang.Object" required="true"/>
<cc:attribute name="crudState" type="java.lang.Integer" required="true"/>
</cc:interface>
...
<cc:implementation>
<p:dataTable var="entity" value="#{cc.attrs.data}" >
<p:columns value="#{cc.attrs.columnModel}"
var="column" style="#{column.style}"
styleClass="#{column.styleClass}">
...
</p:columns>
</p:dataTable>
</cc:implementation>
...
1- 实现(现在):
...
<comp:crud
title="#{cfgUserBean.title}"
data="#{cfgUserBean.data}"
columnModel="#{cfgUserBean.coluuns}"
newEntity="#{cfgUserBean.newEntity}"
newEntity="#{cfgUserBean.crudState}"/>
...
<comp:crud
title="#{cfgCityBean.title}"
data="#{cfgCityBean.data}"
columnModel="#{cfgCityBean.columns}"
newEntity="#{cfgCityBean.newEntity}"
crudState="#{cfgCityBean.curdState}"/>
期望:
将 Bean 名称作为参数传递
2- 组件(所需):
...
<cc:interface>
<cc:attribute name="BEANNAME" type="java.lang.Object" required="true"/>
</cc:interface>
...
<cc:implementation>
<p:dataTable var="entity" value="#{cc.attrs.BEANNAME.data}" >
<p:columns value="#{cc.attrs.BEANNAME.columnModel}"
var="column" style="#{column.style}"
styleClass="#{column.styleClass}">
...
</p:columns>
</p:dataTable>
</cc:implementation>
2- 实现(期望):
...
<comp:crud BEANNAME="cfgUserBean" />
...
<comp:crud BEANNAME="cfgCityBean" />
结论
如您所见,如果我可以将 Bean 名称参数化,我将能够大大简化最终编码。
任何有任何想法的人我能做什么? 提前谢谢你
【问题讨论】:
标签: jsf jsf-2 composite-component