Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

PrimeFacesのTreeでTreeNodeのrendered="false"が消えない件の解決

PrimeFacesはとても便利なJSFコンポーネントライブラリですが、使ってみると細かい所で上手く動かないことがあって、それが自分の使い方が悪いのか、バグなのか中々判断が難しいときがありますね(-_-;

バグに関しても、昔は全てのリビジョンが無償だったのですが、バージョン3.5以降になってからは、次のメジャーバージョンアップまでの間(3.5→4.0の間)はEliteプランに申し込んでサブスクリプションライセンスがないとリビジョン版を手に入れることができなくなってしまっていて、これも辛い所です。

そんなPrimeFaces、9月後半頃にいよいよ4.0がリリースされるようで、現在PrimeFaces4.0のSnapshot版が公開されています。

Trailerまでわざわざ作られている(^^;↓

色々バグ改修されているのは嬉しい反面、デグレとか心配(^^;

とりあえずちょっと触ってみた所、1つ抱えてた悲しいバグが改修されてました。

TreeコンポのTreeNodeでrenderedをfalseに設定したノードが消えない
https://code.google.com/p/primefaces/issues/detail?id=5383

例えば以下のサンプルコード

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>ツリーのノードを非表示にするサンプル</title>
    </h:head>
    <h:body>
        <h:form>
            <p:tree var="node" value="#{treeBean.root}">
                <p:treeNode type="hidden" rendered="false" />
                <p:treeNode>
                    <p:outputLabel value="#{node}" />
                </p:treeNode>
            </p:tree>
        </h:form>
    </h:body>
</html>

typeでhiddenのTreeNodeを用意してあります。
で、バッキングビーンで、特定のTreeNodeだけhiddenにします。

@ManagedBean
@ViewScoped
public class TreeBean implements Serializable{
    
    @Getter @Setter
    private TreeNode root;
    
    @PostConstruct
    public void init(){
        root = new DefaultTreeNode(null, null);
        TreeNode top = new DefaultTreeNode("トップ", root);
        TreeNode child1 = new DefaultTreeNode("子供1", top);

        //孫1-1をhiddenにして画面表示しない
        TreeNode grandchild1 = new DefaultTreeNode("hidden", "孫1-1", child1);

        TreeNode grandchild2 = new DefaultTreeNode("孫1-2", child1);
        TreeNode child2 = new DefaultTreeNode("子供2", top);
        TreeNode grandchild3 = new DefaultTreeNode("孫2-1", child2);
    }
}

3.5までで実行すると
f:id:kikutaro777:20130826220319j:plain
しょぼーん、ですね。空行って…。

4.0-SNAPSHOTで実行すると
f:id:kikutaro777:20130826220345j:plain

綺麗に消えてます。

PrimeFaces4.0で追加される新しい機能などについてはまたどこかで整理したいなぁ。

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村