JSF datatable mit buttons Werte übergeben

Status
Nicht offen für weitere Antworten.

Solid

Neues Mitglied
Hallo Gemeinde.

Ich stehe vor folgendem problem:

Bastel mit gerade eine kleine Benutzerverwaltung. JDBC Anbindung funktioniert. Wenn ich folgende JSP aufrufe wird einer Liste aller User und Ihrer ID ausgegeben. Nun habe ich auch noch Methode geschrieben die einen User aus der DB löscht. Ich möchte das hinter Jedem User/id ein Button ist und wenn ich diesen betätige dieser gelöscht wird und die JSP sich refresht und die Liste neue geladen wird.

Habe eine UserTasks und User Klasse. In User sind alle Attribute. UserTasks erbt von User.

Laden der Liste, sowie der Refresh bei Button klick funktionieren. Hier der Code:

Code:
<h:dataTable id="userlist" columnClasses="list-column-center" rowClasses="list-row"
                                 styleClass="list-background" value="#{UserTasks.userList}" var="currentUser">
                        
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="Benutzername"/>
                            </f:facet>
                            <h:outputText value="#{currentUser.username}"/>
                        </h:column>
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="ID"/>
                            </f:facet>
                            <h:outputText value="#{currentUser.id}"/>
                        </h:column>
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="Option"/>
                            </f:facet>
                            <h:form id="deleteuser">
                                <h:inputText id="username" value="#{currentUser.username}"/>
                                <h:inputText id="id" value="#{currentUser.id}" size="2" />
                                <h:commandButton id="del" action="#{UserTasks.deleteUser}" value="        "/>
                            </h:form>
                        </h:column>
                        
                    </h:dataTable>

Mein Problem ist nun folgendes: Die form in der der "löschButton" liegt wird befüllt mit den Werten aus currentUser.username. Wenn ich löschtButton betätige wird die Methode deleteUser ausgefüht:

Code:
    public String deleteUser() throws Exception {
        UserDBActions.deleteUser(username);
        return Constans.REFRESH;
    }

JSF sorgt ja dafür sich den usernamen aus der Form zu holen. Doch wird er dort ja mit currentuser.username nur temporär gefüllt. Wenn ich den Button hinter einem User drücke ist username bereits wieder "null". Ist ja auch klar weil currentUser.username nur währender des Erstellen der Liste vorhanden ist.

Wie kann ich das Lösen? Wenn ich den Button klicke soll er den Usernamen nehmen welcher kurzzeit in currentUser steht.

Hoffe mir kann nemand helfen.
 

Solid

Neues Mitglied
so habe das Problem gelöst.

habe die fkt. deleteUser einfach in User gepackt. dann kann ich das so lösen:

Code:
<h:commandButton id="del" action="#{currentUser.deleteUser}" value="        "/>

statt

<h:commandButton id="del" action="#{UserTasks.deleteUser}" value="        "/>

und es geht =)
 

freez

Top Contributor
Servus,

ich stehe gerade vor einem ähnlichen Problem. Kannst du dein Code noch etwas ausführlicher darstellen (vor allem die Beans)
 
B

Björn K.

Gast
Hallo!

Wenn ihr in die User-Klasse (also nicht die Klasse die die managed Bean repräsentiert) die Methoden deleteUser und editUser etc... reinmacht könnt ihr mit currentUser als Referenz auf die Entity-Class, die denn User repräsentiert die Actions reinmachen. Das ist das was euch Solid sagen wollte. Also

UserBean ist Managed hat die Methoden getUserList etc.... aber wenn ihr in dem dataTable über die Sätze iteriert und Zeile für Zeile ausgeben lasst, habt ihr ja mit currentUser (welches ja die Referenz auf die Entity-Class User ist) eine Referenz und da könnt ihr einfach ein

DELETE FROM usertabelle WHERE ID = (this.id)

setzen, da die Referenz ja selber den User repräsentiert.

Also nochmal:

Nicht in der UserBean sondern in der User-Entität die Edit und Delete und Save-Methoden rein! So hab ichs auch gemacht.

Viele Grüße

Björn K.
 
B

Björn K.

Gast
Ach so ein REFRESH findet normalerweise automatisch nach dem ausführen einer Action mit #{User.delete} statt.
 

freez

Top Contributor
Hallo,

ich habe es nun anders gelöst:

Zuerst habe ich einen Parameter an den commandLink gehängt, welcher die ID des Datensatzes aus der MySQL Table enthält. Damit habe ich in jeder Row einen Link welcher die passende ID mitschickt:
Code:
<h:commandLink actionListener="#{personListBean.selectPerson}">
     <h:outputText value="Edit" />
     <f:param name="id" value="#{person.id}" id="id"/>
</h:commandLink>

Dabei ist "PersonList" die Bean, welche die komplette Liste enthält und "person" die Bean die ich im Var Attribut des Datatables angebe: var="person"

So, nun wird bei einem Klick auf den commandLink die Methode selectPerson aus der personListBean aufgerufen. Ihr wird ein ActionEvent übergeben, aus dem ich den Parameter mit dem Namen "id" auslesen kann (wird in <f:param dem Attribut id mitgegeben ... hier: id="id"):

Code:
	public String selectPerson(ActionEvent ae){
		UIParameter component = (UIParameter) ae.getComponent().findComponent("id");
		this.selectedId = Integer.parseInt(component.getValue().toString());
		System.out.println(selectedId);
		return "true";
	}

Zuerst hole ich mir den UIParameter mit dem Namen "id". Dann hole ich mir den Wert mit getValue. Da bei mir die ID ein Zahlenwert vom Typ Integer ist, habe ich den String noch in ein Integer gewandelt. Der letzte Vorgang ist allerdings optional.

Man kann das ganze auch noch kürzer schreiben, wenn man es nur als String benötigt:
Code:
this.selectedId = ((UIParameter) ae.getComponent().findComponent("id")).getValue().toString();
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
fiesematente JSF ajax innerhalb DataTable und verschachtelte EL (Brauch dringend hilfe) Allgemeines EE 8
B eine vom Admin hochgeladene csv -Datei in der Datatable auch von jedem User sichtbar Allgemeines EE 0
G Primefaces Zeile in DataTable auswählen Allgemeines EE 1
G JSF Datenstruktur für DataTable Allgemeines EE 2
S Primefaces DataTable und Vererbung Allgemeines EE 1
Raidri [SEAM] rich:dataTable sortBy Problem Allgemeines EE 6
W PrimeFaces datatable zentrieren Allgemeines EE 15
J JSF2.0 / Doppelklick DataTable / Richfaces Allgemeines EE 4
P <h:dataTable> doppelte ausgabe Allgemeines EE 8
D Liste für dataTable (JSF) manuell füllen Allgemeines EE 2
M h:datatable und Info auf leere Liste Allgemeines EE 2
M JSF datatable ineinander schachteln Allgemeines EE 6
N JSF - Frage zu Managed Beans und DataTable Allgemeines EE 4
J JSF: dataTable nebeneinander anordnen Allgemeines EE 5
N JSF + Facelets: Datatable wird nicht angezeigt Allgemeines EE 1
F DataTable mit Checkboxen Allgemeines EE 2
K probleme mit <h:dataTable> Allgemeines EE 2
O Anzeigen mehrerer columns in einer DataTable Allgemeines EE 4
K Datatable Löschen Fehler Allgemeines EE 6
smitty Farbe der Tabellenzellen in "<t:dataTable>" Allgemeines EE 5
F Index im Datatable Allgemeines EE 4
P JSF Datatable und löschen Allgemeines EE 2
C Seltsames Verhalten von JSF DataTable Allgemeines EE 2
feinperligekohlensaeure JSF Keine Tabelle / Buttons werden unter Windows angezeigt + Apple schon Allgemeines EE 9
M JSP werte aus dynamischen Buttons auslesen Allgemeines EE 3
M Zwei Buttons in einem Servlet Allgemeines EE 2
D Java Servlet mit Radio Buttons Allgemeines EE 2
A Textfelder + Buttons sperren Allgemeines EE 6
N JSF-Checkboxen in Tabelle mit Buttons dahinter Allgemeines EE 4
clemson HTML Taglib - mehrere Submit-Buttons & Internationalisie Allgemeines EE 4
M JSF Buttons Allgemeines EE 3
B mehrere submit-buttons in einer jsp Allgemeines EE 11
T Zwei Buttons in derselben FORM rufen unterschied. Servlets a Allgemeines EE 10
OnDemand JSF Primefaces Textfeld-Werte speichern Allgemeines EE 1
F SessionScoped und Stateful EJB: Werte werden nicht behalten Allgemeines EE 3
D ArrayList behält Werte nicht Allgemeines EE 2
M XML einlesen und Werte in DB übertragen Allgemeines EE 2
J Werte aus ActiveDirectory auslesen Allgemeines EE 2
M Struts - jsp site - werte formatieren Allgemeines EE 6
S Zwei Werte mit XPath vergleichen <x:if>. Allgemeines EE 2
T Werte aus einer Auswahliste mit Mehrfachauswahl lesen Allgemeines EE 4

Ähnliche Java Themen


Oben