JSF中属性名称(EL)的连接

时间:2011-06-06 07:49:27

标签: jsf el

如何使用EL连接属性的名称?

这就是我的尝试:

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

但它不起作用。

bean具有四个属性resultA,resultB,resultC和resultD。 getParts()返回“A”,“B”,“C”和“D”。

2 个答案:

答案 0 :(得分:4)

虽然很可能。您可以使用<ui:param>准备动态属性名称,并使用大括号[]来访问它。

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

毋庸置疑,我同意Michael的观点,这是模型设计中的气味。

答案 1 :(得分:3)

我不认为可以在不改变设计的情况下工作。在Java中,设计要求您通过名称访问方法字段和属性通常是个坏主意,更糟糕的是,如果名称是从字符串构建的。

可能的解决方案:

  • getParts()返回“resultA”,“resultB”等,并访问它们#{someOtherBean[getParts()]}
  • 将属性名称更改为abcd并将其设置为#{someOtherBean[getParts()]}
  • 包含一个属性result,其中包含Map,其中包含“A”,“B”等作为键,并将值设为#{someOtherBean.result[getParts()]}