S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

UIComponentを動的に構築するが…

MyFacesの実装の話かな?
MyFaces 1.1.5
下記のようなManagedBeanで、UIコンポーネントを動的に構築する(動的にDataTableのカラムを生成する)ような処理を行う。
初期のJSPの表示で、HtmlDataTableが空の状態のままで画面を表示するとTABLEは表示されない。
これはOK。
この後、なんらかのアクションでcreateUi()メソッドでUIComponentを生成したとしても、画面表示は変わらない。
これはなんで?
このアクションでは同一JSPでの遷移としていた。
それを、イベントでアクションとしてcreateUi()メソッドを実行し、別のJSPから画面遷移すると問題なくHTMLが生成される。
これでOK。
なんとなく、FacesServletがUIコンポーネント・ツリーを生成するフェーズ(ビューの復元)の処理仕様に依存してる感じがしないでもない。

public class ManagedBean {

    // DataTableのUIComponent
    private HtmlDataTable ui = new HtmlDataTable();

    // TABLEで表示するデータのリスト
    private List list = new ArrayList();

    public ManagedBean() {
        super();
    }

    public HtmlDataTable getUi() {
        return this.ui;
    }

    public void setUi(HtmlDataTable ui) {
        this.ui = ui;
    }

    public List getList() {
        return this.list;
    }

    public void setList(List list) {
        this.list= list;
    }

    public void createUi() {
        // DataTableのUIComponetを構築する処理
     }

}
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<html>
<body>

<f:view>

    <h:dataTable id="dataTable"
        binding="#{managedBean.ui}" 
        var="item" value="#{managedBean.list}"
        />

</f:view>

</body>
</html>

同一JSPへの遷移、空の状態(ツリーの子が?)で表示、等の状態では再描画でUIコンポーネント・ツリーを再構築しないetc...とかあるんかな?時間があったら調べてみよ。
とりあえず、汎用的な画面が作れるのが判ったからOK。