Frage

Can I JSF add Komponenten dynamisch? Ich brauche ein Formular mit einer Schaltfläche haben, die eine <h:inputText> zum Formular hinzufügen sollen. Ist das möglich?

Ich weiß, das irgendwie in JavaScript möglich sein sollte. Sie jemand wissen, wie dies in JSF zu tun? Ich denke, das Hauptproblem ist, wie bekomme ich oder Sollwerte der neuen Eingänge über #{value}.

War es hilfreich?

Lösung

Verwenden Sie ein Iterieren Komponente wie <h:dataTable> oder <ui:repeat> eine dynamische Größe List von Einheiten angezeigt werden soll. Sprechen Sie die Bohne @ViewScoped, um sicherzustellen, dass die Liste über Postbacks auf der gleichen Ansicht erinnert wird, anstatt neu über und über.

Kickoff Beispiel mit <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>

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

}

Modell:

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

}

Siehe auch:

Andere Tipps

Es ist sollte so sein

Bind ein Formular-Tag an die Bean-Eigenschaft


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

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

Ein-Ereignis, eine neue Instanz der Eingabekomponente

erstellen
HtmlInputText input=new HtmlInputText();

und heften sich an das Formular

myform.getChildren().add(input);

Verwenden h:dataTable Elemente dynamisch hinzuzufügen ... Haben Sie eine Liste von jeder Art Sie wollen für Datatable Werte schaffen ...

In h:dataTable ... können Sie das Element-Tag enthalten innerhalb <h:column> erstellen

Es wird verwendet, um Elemente zu generieren Sie dynamisch erstellen möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top