我在尝试使用参数访问某些属性时遇到了一些麻烦。好吧,我不知道是否应该将它们称为属性,因为访问器有参数,但我们现在将它们称为属性。
情况是这样的:
我有一个 Student 类,它包含不同的定位作为 map 中的对象。我可以通过这样做来获取这些本地化对象:
student.getLocalizedData(String localizationCode);
现在,在页面上,我正在尝试这样做:
<h:inputText value="#{collegeBean.student.getLocalizedData('es').profileDescription}"/>
一个学生的描述可以有很多本地化。
页面加载正确,但当我尝试保存学生时,它说 bean collegeBean 没有属性 getLocalizedData,但那个是包含在 bean 中的学生的属性。
我知道这条线很疯狂,所以我试着把它包起来:
<h:inputText value="#{collegeBean.getStudentLocalizedData('es').profileDescription}"/>
唉,我又收到了同样的信息。
我找到的唯一解决方案是创建一个完全包装学生属性的方法...但这给我留下了 2 个方法(get + set)用于每个本地化,并且只针对一个属性。这意味着我将不再拥有(2 x 本地化 x 属性)数量的方法!
我可以采取什么方法以最动态的方式解决这个问题?本地化的数量将来可能会发生变化,我不想更改任何代码。
编辑:我正在使用 JBoss 6.1.0.Final 和它附带的 JSF 实现 JSF 2.0.3-b05
最佳答案
这在理论上应该可行,因此我怀疑所使用的 EL 实现中存在错误或疏忽。您可能想尝试不同的 EL 实现(不同的服务器品牌)或升级服务器。如果无效,请将其作为错误报告给服务器供应商。
但是,由于您实际上是将 getLocalizedData()
委托(delegate)给 Map
,最好不要这样做,而是返回整个 Map
直接。
public Map<String, LocalizedData> getLocalizedData() {
return localizedData;
}
这样你就可以像下面这样使用了
<h:inputText value="#{collegeBean.student.localizedData.es.profileDescription}"/>
或者,如果需要的话
<h:inputText value="#{collegeBean.student.localizedData['es'].profileDescription}"/>
关于java - JSF 2.0 和参数化 EL 表达式的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10607994/