Wie erstellt man in JSF ein Eingabefenster mit mehreren Buttons und erkennt den gedrückten Button?

Antwort

In JavaServer Faces (JSF) kannst du ein Unterfenster (Dialog, Modal) mit mehreren Buttons am einfachsten mit einer UI-Komponentenbibliothek wie [PrimeFaces](https://www.primefaces.org/) oder [OmniFaces](https://omnifaces.org/) umsetzen. Hier ein Beispiel mit PrimeFaces, da diese Bibliothek sehr verbreitet ist und einen `<p:dialog>`-Tag für modale Fenster bietet. **Beispiel: Dialog mit mehreren Buttons und Rückgabe des gedrückten Buttons** 1. **Abhängigkeit hinzufügen** Füge PrimeFaces zu deinem Projekt hinzu (z.B. in der `pom.xml` für Maven): ```xml <dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>13.0.0</version> </dependency> ``` 2. **Dialog in der XHTML-Seite definieren** ```xml <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:p="http://primefaces.org/ui"> <h:head /> <h:body> <h:form id="form"> <p:commandButton value="Öffne Dialog" onclick="PF('dlg').show(); return false;" type="button" /> <p:dialog header="Eingabefenster" widgetVar="dlg" modal="true" closable="false"> <h:panelGrid columns="1"> <h:outputText value="Bitte wähle eine Option:" /> <p:commandButton value="Option 1" action="#{dialogBean.buttonAction('Option 1')}" oncomplete="PF('dlg').hide();" update="form:result" /> <p:commandButton value="Option 2" action="#{dialogBean.buttonAction('Option 2')}" oncomplete="PF('dlg').hide();" update="form:result" /> <p:commandButton value="Abbrechen" action="#{dialogBean.buttonAction('Abbrechen')}" oncomplete="PF('dlg').hide();" update="form:result" /> </h:panelGrid> </p:dialog> <h:outputText id="result" value="#{dialogBean.result}" /> </h:form> </h:body> </html> ``` 3. **Backing Bean (z.B. DialogBean.java)** ```java import jakarta.faces.view.ViewScoped; import jakarta.inject.Named; import java.io.Serializable; @Named @ViewScoped public class DialogBean implements Serializable { private String result; public void buttonAction(String button) { this.result = "Du hast '" + button + "' gedrückt."; } public String getResult() { return result; } public void setResult(String result) { this.result = result; } } ``` **Erklärung:** - Das `<p:dialog>`-Element erzeugt das Unterfenster. - Die Buttons rufen jeweils die Methode `buttonAction` im Backing Bean auf und übergeben den Namen des Buttons. - Das Ergebnis wird im OutputText angezeigt. **Hinweis:** Ohne eine UI-Bibliothek wie PrimeFaces ist die Umsetzung eines modalen Dialogs in reinem JSF sehr aufwändig und erfordert viel JavaScript und CSS. PrimeFaces ist daher der empfohlene Weg. Weitere Infos: - [PrimeFaces Dialog Dokumentation](https://www.primefaces.org/showcase/ui/overlay/dialog.xhtml) - [PrimeFaces CommandButton](https://www.primefaces.org/showcase/ui/button/commandButton.xhtml)

KI fragen

Verwandte Fragen

Wie erstellt man ein modales Unterfenster in JSF mit OmniFaces?

Um ein modales Unterfenster (Dialog) in einer JSF-Anwendung mit OmniFaces zu realisieren, empfiehlt sich die Kombination von OmniFaces mit einer UI-Komponentenbibliothek wie [PrimeFaces](https://www.p... [mehr]

Wie kann ich den Tomahawk commandSortHeader ersetzen?

Um den Tomahawk-Tag `<t:commandSortHeader>` abzulösen, gibt es verschiedene Ansätze, je nachdem, welches Framework oder welche Technologie du stattdessen verwenden möchtest. Tomah... [mehr]

Wie sieht der HTML-Code aus, um die Werte "eins, zwei, drei" als Download-Button bereitzustellen?

Um die Werte "eins,zwei,drei" als Download bereitzustellen, kannst du einen einfachen HTML-Code verwenden, der einen Download-Button anbietet. Die Werte werden dabei als Textdatei (z.B. CSV... [mehr]

Warum werden Style-Attribute bei JSF-Tags beim Rendern nicht berücksichtigt?

Das Problem, dass Style-Attribute an JSF-Tags (z. B. `<h:outputText style="color:red;" />`) beim Rendern nicht berücksichtigt werden, kann verschiedene Ursachen haben: 1. **Falsc... [mehr]

Wodurch lässt sich t:column aus Tomahawk in Standard-JSF ersetzen?

Das `t:column`-Tag aus Apache Tomahawk ist eine Erweiterung des Standard-JSF `<h:column>`-Tags. In den meisten Fällen kannst du `t:column` direkt durch `<h:column>` ersetzen, wenn du... [mehr]