2011-06-06 41 views
0

如何连接使用EL的属性名称?JSF:连接属性名称(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”。

回答

3

我不认为可以在不改变设计的情况下工作。在Java中有一个糟糕的想法,那就是需要通过名称来访问方法字段和属性,而如果名称是从字符串构建的,则会更糟糕。

可能的解决方案:

  • getParts()回报 “resultA”, “resultB” 等,并访问他们#{someOtherBean[getParts()]}
  • 更改的属性名称abcd和访问它们为#{someOtherBean[getParts()]}
  • 有一个单一的属性result,它包含一个Map与“A”,“B”等作为键和访问值为#{someOtherBean.result[getParts()]}
+0

谢谢你,迈克尔! – geeehhdaa 2011-06-06 08:18:02

4

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

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

不用说,我同意迈克尔,这是模型设计中的气味。