如何使用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”。
答案 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()]}
a
,b
,c
,d
并将其设置为#{someOtherBean[getParts()]}
result
,其中包含Map
,其中包含“A”,“B”等作为键,并将值设为#{someOtherBean.result[getParts()]}