Eclipse 对 JSF 文件中的 EL 表达式给出了太多错误和警告

Eclipse gives too many false errors and warnings on EL expressions in JSF files

我 运行 遇到了一个奇怪的情况。我有一个应用程序,它最初是在 RAD 中开发的,并使用了类似

的结构
rendered="#{bean.show and user.can('foo')}"

我们的开发人员混合使用 RAD 和 Eclipse Juno/Kepler。所以我们需要让代码在两种环境下都能正常工作。

在 RAD 中,以上行不会产生任何错误。当我将项目导出为存档并将其导入 Eclipse Juno 时,它会生成此错误

Cannot apply expression operators to method bindings

我们的环境是 Websphere 8.5、RAD/Eclipse、JSF 2.1

我该如何解决这个问题?

一般来说,如果您在 Eclipse 中的 JSF 文件中遇到错误的 EL 验证错误,请尝试在 Window > 首选项 > Web > JavaServer Faces 工具 > 验证中查看 并调整当前(不必要地)设置在 Error.

的一些设置

您的特定问题是由“将运算符应用于方法绑定”触发的,它确实默认为 Error。如果无法将 Eclipse 升级到最新版本,将其设置回 Warning 应该会降低它的音量。

毕竟,Eclipse 中的 EL 验证是一个史诗般的失败。它似乎使用正则表达式来验证 EL 语法,而不是像 EL 本身那样使用真正的基于堆栈的解析器。 “类型强制问题”和“类型分配问题”下面有几个条目被不必要地设置为 Error 并且已知会导致假错误。

另请参阅:

  • Method must have signature "String method() ...[etc]..." but has signature "void method()"

我对这些陈述中的任何一个都犯了同样的错误:
<h:panelGroup rendered="#{!bean.isValid(obj)}"> <h:panelGroup rendered="#{not bean.isValid(obj)}">

我通过如下更改语句解决了错误:
<h:panelGroup rendered="#{bean.isValid(obj) == false}">

我找到了另一个解决问题的例子:
<ui:fragment rendered="#{bean.isValid(obj) eq 'false'}">