如何阻止 EL 表达式在未呈现的 JSF 组件中进行评估?
Posted
技术标签:
【中文标题】如何阻止 EL 表达式在未呈现的 JSF 组件中进行评估?【英文标题】:How do I stop EL expressions from being evaluated in non-rendered JSF components? 【发布时间】:2011-05-19 21:57:48 【问题描述】:编辑:没关系!
我正在将我的项目从带有 Facelets 的 JSF 1.2 切换到带有 Facelets 的 JSF 2。看起来,在 JSF 2 中,未呈现的组件中的 EL 表达式被评估。在 JSF 1.2 中似乎并非如此。所以你会遇到这样的问题:
<h:panelGroup rendered="#not empty myBean.myPojo">
<h:outputText value="#myBean.myPojo.pojoProperty" />
</h:panelGroup>
如果 myBean.myPojo 为 null,则导致 NullPointerException,而我的项目的 JSF 1.2 版本中没有。对于这些情况,另一种方法是使用 c:if(而不是 h:panelGroup rendering="..."),但这有其自身的问题。我做错了什么吗?有一些配置吗?谢谢!
【问题讨论】:
在特定的代码示例中,它不应该导致 NPE。请张贴实际代码。或者如果确实如此,那么它是 EL 中的一个错误。 EL 旨在实现 nullsafe。然后,您应该提及您正在使用哪个 EL 实现(servletcontainer)。 你是对的;我发现了一个不相关的错误导致了这种情况。谢谢! 【参考方案1】:如果仅此而已,那么这似乎是底层 EL 实现中的一个错误。我建议检查是否有新版本,是否以前报告过此问题,如果没有,请报告! :)
【讨论】:
以上是关于如何阻止 EL 表达式在未呈现的 JSF 组件中进行评估?的主要内容,如果未能解决你的问题,请参考以下文章
结合接缝 3 和 JSF2 复合组件 valueChangeListener 评估 El 表达式的问题