我有以下树节点类:
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
(以及 get
和 set
)前缀。
<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/