Wie dynamisch JSF-Komponenten hinzufügen
-
25-09-2019 - |
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}
.
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
erstellenHtmlInputText 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.