2014-09-01 1 views
0

Я искал способ параметризации класса Managed 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, я смог бы упростить окончательное кодирование.

Любой, у кого есть идеи, что я могу сделать? Заранее спасибо

ответ

2

Помогло @BalusC, чтобы прояснить мои идеи, и я замечаю, что вторая реализация почти ответила на мой вопрос.

Итак, то, что я сделал:

Componet

... 
<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 для внимание !! :-)

 Смежные вопросы

  • Нет связанных вопросов^_^