32

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

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

4

3 に答える 3

36

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

キックオフの例<h:dataTable>(<ui:repeat>単に replace <h:dataTable>by<ui:repeat><h:column>eg <li>orを使用する場合<div>):

<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:

@Named
@ViewScoped
public class Bean {

    private List<Item> items;

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

    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);
    }

}

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

于 2010-08-04T20:22:21.783 に答える
1

そんなはずだよ

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


<form binding="#{myBean.myform}">...</form>

@ManagedBean("myBean")
public class Bean{
   property HtmlForm myform;
}

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

HtmlInputText input=new HtmlInputText();

フォームに添付します

myform.getChildren().add(input);
于 2012-03-29T11:24:31.270 に答える
0

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

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

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

于 2013-01-24T05:45:40.333 に答える