Объединение имени свойства (EL) в JSF - PullRequest
0 голосов
/ 06 июня 2011

Как я могу объединить имя свойства с помощью EL?

Вот что я пробовал:

<ui:repeat value="#{someBean.getParts()}" var="part">  
        <h:inputTextarea value="#{someOtherBean.result}#{part}" />      
</ui:repeat>  

Но это не сработало.

Боб имеет четыре свойства resultA, resultB, resultC и resultD.getParts () возвращает «A», «B», «C» и «D».

Ответы [ 2 ]

4 голосов
/ 06 июня 2011

Хотя это вполне возможно. Вы можете использовать <ui:param> для подготовки динамического имени свойства и использовать обозначение скобки [] для доступа к нему.

<ui:repeat value="#{someBean.parts}" var="part">  
    <ui:param name="resultPart" value="result#{part}" />
    <h:inputTextarea value="#{someOtherBean[resultPart]}" />
</ui:repeat>

Нет необходимости говорить, что я согласен с Майклом, что это запах в дизайне модели.

3 голосов
/ 06 июня 2011

Не думаю, что это можно заставить работать без изменения дизайна.Как правило, в Java плохая идея иметь дизайн, требующий доступа к полям и свойствам методов через имя, и хуже, если имя создается из строк.

Возможные решения:

  • иметь getParts(), возвращать «resultA», «resultB» и т. Д. И обращаться к ним #{someOtherBean[getParts()]}
  • изменить имена свойств на a, b, c, d иобращаться к ним как #{someOtherBean[getParts()]}
  • , иметь одно свойство result, которое содержит Map с «A», «B» и т. д. в качестве ключей и получать доступ к значениям как #{someOtherBean.result[getParts()]}
...