jsf - 尝试解析 EL 中的 boolean 属性时出现 javax.el.PropertyNotFoundException

标签 jsf boolean naming-conventions el propertynotfoundexception

我有以下树节点类:

public abstract class DocumentTreeNode extends TreeNodeImpl implements javax.swing.tree.TreeNode
{
    private Boolean isToC;

    ...

    public Boolean isToC()
    {
        return isToC;
    }

    public void setToC(Boolean isToC)
    {
        this.isToC = isToC;
    }

}

这是一个简单的复选框,指示文档是否包含在任何内容中。但是,当尝试从 JSF 2 EL 中引用此内容时

...
<h:selectBooleanCheckbox value="#{node.isToC}" />
...

我遇到异常:

Caused by: javax.el.PropertyNotFoundException: /main.xhtml @541,64 value="#{node.isToC}": The class 'ChapterTreeNode' does not have the property 'isToC'.

(我想我几乎尝试了所有组合,至少我是这样感觉的......;-))

如何解析该 boolean 属性?需要改变什么?

最佳答案

您不应指定方法名称,而应指定属性名称。指定 bean 属性时,您需要省略 is(以及 getset)前缀。

<h:selectBooleanCheckbox value="#{node.toC}" />

EL 将自动为属性使用正确的 getter/setter(请注意,这确实意味着实例变量的物理存在不是必需的)。你得到的异常,

Caused by: javax.el.PropertyNotFoundException: /main.xhtml @541,64 value="#{node.isToC}": The class 'ChapterTreeNode' does not have the property 'isToC'.

基本上意味着不存在诸如 isIsToc()getIsToc() 这样的方法(而且它是正确的)。

你的第二个问题是你使用了Boolean而不是boolean。然后,您应该真正调用方法 getToC()getIsToC() 而不是 isToC()。在后一种情况下,您可以继续使用#{node.isToC}

另请参阅:

关于jsf - 尝试解析 EL 中的 boolean 属性时出现 javax.el.PropertyNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7437803/

相关文章:

java-jsf 库,具有良好的移动浏览器支持

checkbox - Lotus Notes - 如何用公式语言读出复选框值

objective-c - 启用/禁用或激活/停用的方法的命名约定

Java 命名约定与英语语言正确性

java - 从 JSP 弹出窗口获取值后,JSP 页面值未填充

JSF EL : instanceof reserved but not yet implemented?

java - Jboss登录并重定向到正确的url

c++ - 如果 bool 为 false,则停止程序在 C++ 中运行

c++ - Boost.Program_Options : When <bool> is specified as a command-line option, 什么是有效的命令行参数?

c - C 中最常见的命名约定是什么?