我遇到了一个奇怪的情况。我有一个应用程序,最初在RAD中开发并使用像
这样的结构rendered="#{bean.show and user.can('foo')}"
我们的开发人员使用RAD和Eclipse Juno / Kepler的混合体。因此,我们需要使代码在两种环境中都能正常工作。
在RAD中,上述行不会产生任何错误。当我将项目导出为存档并将其导入Eclipse Juno时,它会生成此错误
无法将表达式运算符应用于方法绑定
我们的环境是Websphere 8.5,RAD / Eclipse,JSF 2.1
我该如何解决这个问题?
答案 0 :(得分:16)
通常,如果您在Eclipse中的JSF文件中遇到错误的EL验证错误,请尝试在 Window>中查看。偏好>网络> JavaServer Faces工具>验证并调整当前(不必要地)设置为错误的一些设置。
您的特定问题是由"将运算符应用于方法绑定"确实默认为错误。如果将Eclipse升级到最新版本不是一个选项,将其设置回警告应该会降低它。
毕竟,Eclipse中的EL验证是一个非常史诗般的失败。似乎它使用正则表达式来验证EL语法,而不是像EL本身那样正确的基于堆栈的解析器。下面有几个条目"类型强制问题"和"类型分配问题"它们被不必要地设置为错误并且已知会导致错误。
答案 1 :(得分:2)
我对这些陈述都有同样的错误:
<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'}">