web-dev-qa-db-ja.com

JSFコンポーネントを動的に追加する方法

JSFコンポーネントを動的に追加できますか?フォームに<h:inputText>を1つ追加するボタンのあるフォームが必要です。これは可能ですか?

これはどういうわけかJavaScriptで可能になるはずです。 JSFでこれを行う方法を誰かが知っていますか?主な問題は、#{value}を介して新しい入力の値を取得または設定する方法だと思います。

30
ErVeY

<h:dataTable><ui:repeat>などの反復コンポーネントを使用して、動的にサイズ変更されるエンティティのListを表示します。 Beanを@ViewScopedにして、リストが何度も再作成されるのではなく、同じビューのポストバック全体で確実に記憶されるようにします。

<h:dataTable>によるキックオフの例:

<h:form>
    <h:dataTable value="#{bean.items}" var="item">
        <h:column><h:inputText value="#{item.value}" /></h:column>
        <h:column><h:commandButton value="remove" action="#{bean.remove(item)}" /></h:column>
    </h:dataTable>
    <h:commandButton value="add" action="#{bean.add}" />
    <h:commandButton value="save" action="#{bean.save}" />
</h:form>

管理対象Bean:

@ManagedBean
@ViewScoped
public class Bean {

    private List<Item> items;

    @PostConstruct
    public void init() {
        items = new ArrayList<Item>();
    }

    public void add() {
        items.add(new Item());
    }

    public void remove(Item item) {
        items.remove(item);
    }

    public void save() {
        System.out.println("items: " + items);
    }

    public List<Item> getItems() {
        return items;
    }

}

モデル:

public class Item {

    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String toString() {
        return String.format("Item[value=%s]", value);
    }

}

以下も参照してください。

32
BalusC

それはそのようでなければなりません

フォームタグをBeanプロパティにバインドする

_
<form binding="#{myBean.myform}">...</form>
_
_
@ManagedBean("myBean")
public class Bean{
   property HtmlForm myform;
}_

イベント時に、入力コンポーネントの新しいインスタンスを作成します

HtmlInputText input=new HtmlInputText();

フォームに添付します

myform.getChildren().add(input);
1
corsair

使用する h:dataTable要素を動的に追加します... dataTableに値を提供する任意のタイプのリストを持っています...

h:dataTable...要素タグを含めて、内部に作成できます<h:column>

動的に作成する要素を生成するために使用されます。

0
Arun