13

次のツリー ノード クラスがあります。

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}" />
...

例外があります:

原因: javax.el.PropertyNotFoundException: /main.xhtml @541,64 value="#{node.isToC}": クラス「ChapterTreeNode」にプロパティ「isToC」がありません。

(ほぼすべての組み合わせを試したと思いますが、少なくとも私はこのように感じました... ;-) )

そのブール値のプロパティを解決するにはどうすればよいですか? 何を変更する必要がありますか?

4

1 に答える 1

23

メソッド名を指定するのではなく、プロパティ名だけを指定する必要があります。Bean プロパティを指定するときは、 is(and getand ) プレフィックスを省略する必要があります。set

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

EL は、プロパティに適切な getter/setter を自動的に使用します (これは、インスタンス変数が物理的に存在する必要がないことを意味することに注意してください)。あなたが得た例外、

原因: javax.el.PropertyNotFoundException: /main.xhtml @541,64 value="#{node.isToC}": クラス「ChapterTreeNode」にプロパティ「isToC」がありません。

基本的に、isIsToc()orのようなメソッドがないことを意味しますgetIsToc()(そして、それは正しいです)。

2番目の問題は、Booleanの代わりに使用したことですboolean。次に、メソッドgetToC()orgetIsToC()の代わりに実際に呼び出す必要がありisToC()ます。後者の場合はそのまま使い続けることができます#{node.isToC}

以下も参照してください。

于 2011-09-15T21:46:34.700 に答える