java - JSF 2.0 和参数化 EL 表达式的问题

标签 java jsf-2 el

我在尝试使用参数访问某些属性时遇到了一些麻烦。好吧,我不知道是否应该将它们称为属性,因为访问器有参数,但我们现在将它们称为属性。

情况是这样的:

我有一个 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/

相关文章:

java - Hadoop MapReduce Java 实现中的 Reducer

java - 尽管有 Import-Package,但 org.osgi.framework.BundleActivator 的 ClassNotFoundException

validation - 单击特定按钮时如何跳过验证?

javax.el.PropertyNotFoundException : The class 'PureJavaClasses.employeeClass' does not have the property 'Id'

Java服务器页面: How to get a value into an attribute from code without Expression Language?

java - 使用\t 排列文件输出

java - "getDeclaredXyz"在Java反射包中代表什么

jsf-2 - 从 JSP 迁移到 Facelets,如何替换一些 scriptlets?

java - JSF 2 事件列表?

java - 将变量从 servlet 传递到 JSP