【问题标题】:Expression language change with primefaces 5.2primefaces 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,也许这就是问题所在?

【问题讨论】:

  • 你能提供更多的上下文吗? &lt;ui:param&gt; 不是来自 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 发布。

标签: jsf-2 primefaces facelets jsf-2.2 juel


【解决方案1】:

根据堆栈跟踪,您有一个&lt;p:outputLabel indicateRequired="true"&gt;,它想检查是否在关联的bean 属性上定义了任何@NotNull。 PrimeFaces 正在使用它自己开发的 org.primefaces.el.ValueExpressionAnalyzer 来分解表示与标签组件关联的输入组件值的 EL 表达式。

但是,在 5.2 中,changed5.1 相比是 issue 8093 对空嵌套属性的 EL 检查失败的修复结果。现在它不再区分方法表达式了。最好的办法是向 PrimeFaces 人员报告 issue,并告诉他们查看 OmniFaces org.omnifaces.el.ExpressionInspector 如何以正确的方式进行 EL 表达式分析工作。

不过,您将只读值称为所需输入组件的值,这有点奇怪。

【讨论】:

    猜你喜欢
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多