如何阻止 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 组件中进行评估?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 JSF 复合方面的验证在未呈现方面时完成

结合接缝 3 和 JSF2 复合组件 valueChangeListener 评估 El 表达式的问题

JSF 复合组件支持 bean EL 表达式作为必需属性的默认值失败,方法未知

EL 空运算符如何在 JSF 中工作?

JSF 何时评估 EL 表达式

如果关联组件未呈现,是不是可以调用 JSF Bean 的 Setter?