我已经搜索了如何对Managed Bean类进行参数化,直到现在还没有。
我在做什么?
我有一个从我的Bean访问某些方法的JSF组件,但这个方法已经由一个抽象类实现。
方法和属性的名称不会改变,但现在我正在复制和粘贴,只更改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名称,我将能够简化最终编码。
任何有想法我能做什么的人? 提前谢谢
答案 0 :(得分:2)
由@BalusC帮助澄清我的想法,我注意到第二个实现几乎回答了我的问题。
那就是我所做的:
<强>及部件强>
...
<cc:interface>
<cc:attribute name="managedBean" type="company.AbstractWebCrud" required="true"/>
</cc:interface>
...
<cc:implementation>
<p:dataTable var="entity" value="#{cc.attrs.managedBean.data}" >
...
</p:dataTable>
</cc:implementation>
...
<强>实施强>
...
<comp:crud-lista
managedBean="#{cfgUserBean}"/>
...
<强>结论强>
将抽象类作为参数类型传递,我能够从类中访问所有公共方法。工作就像一个魅力!
谢谢@BalusC的关注!! : - )