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' ?>
<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);
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までで実行すると

しょぼーん、ですね。空行って…。
4.0-SNAPSHOTで実行すると

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