如何使用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"one_answers"D"。
这是很有可能的。您可以使用<ui:param>
来准备动态属性名称,并使用大括号符号[]
来访问它。
<ui:repeat value="#{someBean.parts}" var="part">
<ui:param name="resultPart" value="result#{part}" />
<h:inputTextarea value="#{someOtherBean[resultPart]}" />
</ui:repeat>
不用说,我同意迈克尔的观点,这是模型设计中的一种气味。
我认为如果不改变设计,这是不可能实现的。在Java中,设计要求通过名称访问方法字段和属性通常是个坏主意,如果名称是从字符串构建的,则更糟。
可能的解决方案:
- 让
getParts()
返回"resultA"、"resultB"等,并访问它们#{someOtherBean[getParts()]}
- 将特性名称更改为
a
、b
、c
、d
,并将其作为#{someOtherBean[getParts()]}
进行访问 - 具有单个属性
result
,该属性包含以"a"、"B"等为键的Map
,并以#{someOtherBean.result[getParts()]}
的身份访问值