2014-09-01 56 views
0

我已經搜索瞭如何參數化Managed Bean類,直到現在還沒有。將受管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的名稱作爲參數

- 組件(期望):

... 
<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名稱,我將能夠簡化很多最終編碼。

任何一個有任何想法我可以做什麼? 謝謝你提前

回答

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}"/> 
... 

結論

傳遞抽象類作爲參數類型,我能夠訪問類中的所有公共方法。像魅力一樣工作!

謝謝@BususC關注! :-)