【问题标题】:Undefined variable in JSF Expression LanguageJSF 表达式语言中的未定义变量
【发布时间】:2015-02-25 13:56:10
【问题描述】:

有没有办法将 EL 引擎置于“严格”模式?
当我引用 EL 中不存在的内容时,我想收到一条错误消息。

例如,我希望这样产生一个错误:

... value="#{cc.attr.attrname}" ...

拼写错误。应该是:

... value="#{cc.attrs.attrname}" ...

默认行为似乎是:
忽略cc 没有attr 成员这一事实,并为value 分配一个空字符串。

如果重要的话,我在 Glass Fish 3.1.2.2 下使用 Mojarra 2.2.9 和

<class-loader delegate="false" />
<property name="useBundledJsf" value="true"/>

【问题讨论】:

    标签: jsf el jsf-2.2


    【解决方案1】:

    EL 在运行时进行评估,因此编译器/IDE 无法知道某些 EL 表达式将解析为什么。您的问题在自定义组件的上下文中确实有意义,但是没有什么可以阻止您在代码中添加 &lt;c:set var="cc" value="some string"/&gt; 之类的内容,这会混淆编译器/IDE。

    【讨论】:

    • 我理解无法在编译时捕获它。但是我希望在运行时出现错误,当它评估表达式时。如果我引用#{someBean.nonExistantProperty},我会得到FacesException: The class 'SomeBean' does not have the property 'nonExistantProperty'。但是,如果我引用 #{nonExistantBean.nonExistantProperty},则没有任何迹象表明它无法解析 nonExistantBean。
    • 我没有看代码,但是当你使用#{nonExistantBean.nonExistantProperty}时,会在上下文映射中搜索键nonExistingBean。可能有一个空检查,所以在null 的情况下,表达式的其余部分被忽略。另一方面,对于#{someBean.nonExistantProperty},someBean 已经解析为现有对象,其余部分使用反射应用于它。如果发生异常,则会在调用堆栈中进一步向上传播。
    猜你喜欢
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2011-01-13
    • 2011-06-24
    • 2015-02-03
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多