0

コンポーネント(質問)がすべてプログラムでバッキングBeanに生成されるアンケートフォームがあります。

フォーム送信イベントでは、すべてのユーザー入力を収集してデータベースに保存する必要があります。

しかし、JSFは動的に生成されたコンポーネントを認識せず、Faceletsページにあるパネルグリッドと送信ボタンであるコンポーネントのみを検出します。これは私のsubmit()メソッドです。

   public boolean submit() {
        UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
        UIComponent formComponent = viewRoot.findComponent("mainForm");  //form id
        HtmlForm form = (HtmlForm)formComponent;
        List<UIComponent> componentList = form.getChildren();
        for(int p=0; p<componentList.size(); p++) {
            UIComponent component = componentList.get(p);
                System.out.println("The Component ID is:"+component.getId());
        }
        return true;
}

それで、誰かが私が上記の方法以外の私のコンポーネントをどこで狩ることができるか知っていますか?

4

1 に答える 1

0

これは、提出された値を収集する正しい方法ではありません。

代わりに、コンポーネントのvalue属性をBeanプロパティにバインドする必要があります。例えば

UIInput input = new HtmlInputText();
input.setId("input1");
input.setValueExpression("value", createValueExpression("#{bean.input1}", String.class));
form.getChildren().add(input);

このようにして、JSFは通常の方法でBeanプロパティを更新します。

private String input1; // +getter+setter

public void submit() {
    System.out.println(input1); // Look, JSF has already set it.
}

Map<String, Object>プロパティを利用して、さらにダイナミクスをもたらすことができます。

参照:

于 2012-09-18T14:09:18.140 に答える