primefaces 5.2 中的表达式语言更改
Posted
技术标签:
【中文标题】primefaces 5.2 中的表达式语言更改【英文标题】:Expression language change with primefaces 5.2 【发布时间】:2015-07-17 14:46:34 【问题描述】:在 primefaces 5.1 中,只在托管 bean 中引用 getter 没有问题
<ui:param name="curSearch" value="#searchBL.getSelectedSearch()" />
改成primefaces 5.2.2我要做的
<ui:param name="curSearch" value="#searchBL.selectedSearch" />
并提供一个 getter 和一个 setter。为什么?
例外:
09:35:29,178 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (http-/0.0.0.0:9090-6) Error Rendering View[/views/main.xhtml]: javax.el.ELException: /sections/search/searchOptions.xhtml @23,111 value="#curSearch.sortPropertyName": /sections/search/firstSearchTab.xhtml @44,53 value="#curSearch": /sections/searchMaskContent.xhtml @38,74 value="#searchBL.getSelectedSearch()": Cannot find method 'getSelectedSearch' in 'class SearchBL$Proxy$_$$_WeldClientProxy'
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:103) [jsf-impl-2.2.10.jar:2.2.10]
at org.primefaces.el.ValueExpressionAnalyzer.intercept(ValueExpressionAnalyzer.java:69) [primefaces-5.2.2.jar:5.2.2]
at org.primefaces.el.ValueExpressionAnalyzer.getReference(ValueExpressionAnalyzer.java:27) [primefaces-5.2.2.jar:5.2.2]
at org.primefaces.metadata.BeanValidationMetadataExtractor.extractPropertyDescriptor(BeanValidationMetadataExtractor.java:64) [primefaces-5.2.2.jar:5.2.2]
at org.primefaces.metadata.BeanValidationMetadataExtractor.extractConstraintDescriptors(BeanValidationMetadataExtractor.java:51) [primefaces-5.2.2.jar:5.2.2]
at org.primefaces.metadata.BeanValidationMetadataExtractor.extractDefaultConstraintDescriptors(BeanValidationMetadataExtractor.java:46) [primefaces-5.2.2.jar:5.2.2]
at org.primefaces.component.outputlabel.OutputLabelRenderer.isNotNullDefined(OutputLabelRenderer.java:139) [primefaces-5.2.2.jar:5.2.2]
at org.primefaces.component.outputlabel.OutputLabelRenderer.encodeEnd(OutputLabelRenderer.java:121) [primefaces-5.2.2.jar:5.2.2]
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919) [jsf-api-2.2.10.jar:2.2]
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312) [jsf-impl-2.2.10.jar:2.2.10]
at com.sun.faces.renderkit.html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:114) [jsf-impl-2.2.10.jar:2.2.10]
我用的是 JUEL EL,也许这就是问题所在?
【问题讨论】:
你能提供更多的上下文吗?<ui:param>
不是来自 PrimeFaces。它来自 Facelets。 #
的东西也不是来自 PrimeFaces。它来自 JSF 和容器。所以很奇怪它的行为受到 PrimeFaces 升级的影响。这更有可能是一种误解。
我使用 juel 2.2.7。如果我只将 pf 版本从 5.1.17 更改为 5.2.2,我会收到此异常。使用 5.1.17 它可以正常工作。
ui:include 只是一个例子。我不得不在几个地方更改它(顺便切换回 5.1.17 以解决另一个问题)
看起来他们以不兼容的方式更改了ValueExpressionAnalyzer
。报告问题。
只是想知道这如何导致 5.2 发布。
【参考方案1】:
根据堆栈跟踪,您有一个<p:outputLabel indicateRequired="true">
,它想检查是否在关联的bean 属性上定义了任何@NotNull
。 PrimeFaces 正在使用它自己开发的 org.primefaces.el.ValueExpressionAnalyzer
来分解表示与标签组件关联的输入组件值的 EL 表达式。
但是,在 5.2 中,changed 与 5.1 相比是 issue 8093 对空嵌套属性的 EL 检查失败的修复结果。现在它不再区分方法表达式了。最好的办法是向 PrimeFaces 人员报告 issue,并告诉他们查看 OmniFaces org.omnifaces.el.ExpressionInspector
如何以正确的方式进行 EL 表达式分析工作。
不过,您将只读值称为所需输入组件的值,这有点奇怪。
【讨论】:
以上是关于primefaces 5.2 中的表达式语言更改的主要内容,如果未能解决你的问题,请参考以下文章