Wie werden Details der aktuellen Zeile aus p: dataTable in einem p: -Dialog angezeigt und nach dem Speichern aktualisiert?
Ich habe eine JSF 2-Anwendung mit zwei Seiten, eine zum Auflisten von Schülern und eine zum Anzeigen von Details eines bestimmten Schülers. Die Listenseite enthält einen Link zur Detailseite in jeder Zeile der Schülertabelle, auf der beim Klicken eine neue Registerkarte im Browser geöffnet wird, auf der diese Details angezeigt werden.
Jetzt wurden die Anforderungen dahingehend geändert, dass Details nicht mehr in einem neuen Tab, sondern in einem modalen Dialogfeld auf der Listenseite angezeigt werden.
Meine Idee ist es, den Inhalt der Detailseite einfach in das modale Dialogfeld einzubetten, damit die Auflistungsseite nicht zu groß und schwer zu pflegen wird. Hier fangen meine Zweifel an. Nach einigen Recherchen habe ich den Link in jeder Zeile der Liste auf den folgenden Button geändert:
<p:commandButton value="Details" type="button"
onclick="PF('dialog-details').show()">
</p:commandButton>
Der Dialog wird wie folgt deklariert:
<p:dialog widgetVar="dialog-details" header="Details" modal="true" width="95%">
<ui:include src="student_details.xhtml">
<ui:param name="id" value="#{student.id}"/>
</ui:include>
</p:dialog>
Abschließend wurde die Detailseite folgendermaßen geändert:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<f:metadata>
<f:viewParam name="id" value="#{studentBean.id}" />
</f:metadata>
<h1 class="title ui-widget-header ui-corner-all">Details of #{studentBean.bean.name} / #{studentBean.bean.number}</h1>
</ui:composition>
Wenn ich auf die Schaltfläche klicke, wird der Dialog wirklich angezeigt und der Inhalt ist die Detailseite. Ich sehe folgenden Inhalt im Dialog:
Details of /
Überhaupt keine Fehler, aber die Daten, die angezeigt werden sollen, sind es nicht. Ein Haltepunkt wurde in @ gesetStudentBean.setId()
(diese Methode lädt eine Eigenschaft mit dem Namenbean
mit demStudent
Instanz, die der übergebenen ID entspricht, wird aber nie getroffen.
achdem ich einige Zeit darüber nachgedacht hatte, wurde mir klar, warum es nicht funktioniert. Der an die Detailseite übergebene Parameter iststudent.id
, aberstudent
ist der Name, der als @ verwendet wivar
in dem<p:datatable/>
das zeigen alle Schüler, sostudent
ist nicht gültig in<p:dialog/>
welches sich außerhalb des @ befind<p:datatable/>
.
Also, was ich brauche, ist eine Möglichkeit, den Dialog mit der ID des entsprechenden Schülers in einer bestimmten Zeile anzuzeigen. Im Idealfall hätte ich gerne einen Ajax-Anruf hier, damit die Details nur bei Bedarf geladen werden.
Irgendwelche Ideen