ICEfacesでのツリーコンポーネント

JSF標準にはTreeコンポーネントはありません。ですが、ICEfacesにはあります。しかも非常に面白い。

まずvalueプロパティにバインドするプロパティを用意します。

DefaultTreeModel model;

public DefaultTreeModel getModel() {
    return model;
}

public void setModel(DefaultTreeModel model) {
    this.model = model;
}

たぶん、このへんでピンときた人も多いと思いますが、このモデルはSwingのモデルです。

初期化コードをみるとさらによくわかります。

//ルートノード
DefaultMutableTreeNode root =  new DefaultMutableTreeNode();
IceUserObject rootUO = new IceUserObject(root);
rootUO.setText("るーと");
root.setUserObject(rootUO);

//子ノード
DefaultMutableTreeNode chield1 = new DefaultMutableTreeNode();
IceUserObject chield1UO = new IceUserObject(chield1);
chield1UO.setText("ちゃいるど1");
chield1UO.setLeaf(true);
chield1.setUserObject(chield1UO);
root.add(chield1);

DefaultMutableTreeNode chield2 = new DefaultMutableTreeNode();
IceUserObject chield2UO = new IceUserObject(chield2);
chield2UO.setText("ちゃいるど2");
chield2UO.setLeaf(true);
chield2.setUserObject(chield2UO);
root.add(chield2);


model = new DefaultTreeModel(root);

これで

  • るーと
    • ちゃいるど1
    • ちゃいるど2

というようなツリー表示が出来上がります。Swing使いには簡単ですね。Swingですでにモデルが標準APIとして用意されているのだからそれを使うという思い切りのよさが素敵です。

注意しなくてはいけないのはユーザーオブジェクトはIceUserObjectを継承したものでなくてはならないというところだけです。


あとはVisual Web ICEfacesだとツリーコンポーネントを貼り付けるとクリックイベントが設定されているのでそれを削除すること。

まさかWebアプリで「DefaultMutableTreeNode」がでてくるとは夢にも思うまい。


そのままvalueをセットするとデザイン時に不具合が出ると思うので後で書く。



いつのまにかはてなスーパーpre記法でソースコードにまともにマルチバイトがつかえないようになってるくさい。しかたがないのでただのpreに。ちなみにプレビューは問題ない。最近ダイアリーにバグうめこんだ?