Witam
Chcę napisać coś takiego, że wybierając z menu strone pt. "editPage.xhtml" wyswietli sie na niej cala lista uzytkowników pobranych z bazy danych (JDBC). Kazdy wiersz zawiera przycisk "Edytuj" - czyli kazdy user ma swoj przycisk edycji mowiac inaczej. Mój problem polega na tym, że gdy wybieram Edytuj np. na 3 użytkowniku, edytuje sie zawsze ten ostatni z listy. Co nie wybiore zawsze on jest "celem" edycji.
Obiekt DAO przetestowałem na jakiejś prostej klasie w mainie i sam w sobie działa dobrze.
Oto kody strony i ziarenka:
editPage.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui" xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Edit users from the list</title>
</h:head>
<h:body>
<ui:composition template="template.xhtml">
<ui:define name="content">
<h:form>
<p:dataTable value="#{userList.userListToDisplay}" var="user">
<p:column headerText="ID:">
<h:outputText value="#{user.id}"/>
</p:column>
<p:column headerText="Imie:">
<h:outputText value="#{user.imie}"/>
</p:column>
<p:column headerText="Nazwisko:">
<h:outputText value="#{user.nazwisko}"/>
</p:column>
<p:column>
<p:commandButton value="Edit mode" onclick="PF('editDialog').show();" style="height: 40px;"/>
<p:dialog widgetVar="editDialog" effect="slide" style="opacity: 0.90; height: 80px; width:60%; margin-left: 20%;">
<div style="text-align: center; background-color: yellowgreen; width: 100%; border: 2px solid orange; border-radius: 5px;">
<h:outputText value="Imie:"/>
<p:inputText value="#{userList.imie}"/>
<h:outputText value="Nazwisko:"/>
<p:inputText value="#{userList.nazwisko}"/><br/>
<p:commandButton value="Accept" onclick="PF('editDialog').hide(); location.refresh();" action="#{userList.acceptEditedUser(user)}"/>
</div>
</p:dialog>
</p:column>
</p:dataTable>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
I jeszcze kod ziarenka, troszkę okrojony, żeby ograniczyć wprowadzanie chaosu dla waszych oczu :P
@ManagedBean(name = "userList")
@RequestScoped
public class UserListBean {
private List<User> userListToDisplay;
private UserDAO userDAO = new UserDAO();
private String imie;
private String nazwisko;
public UserListBean(){
this.userDAO.getConnection();
this.userListToDisplay = this.userDAO.getUsers();
this.userDAO.closeConnection();
}
public String acceptEditedUser(User user){
this.userDAO.getConnection();
userDAO.updateUserById(user.getId(), this.imie, this.nazwisko);
userListToDisplay = this.userDAO.getUsers();
this.userDAO.closeConnection();
return null;
}
public List<User> getUserListToDisplay() {
return userListToDisplay;
}
public String getImie() {
return imie;
}
public void setImie(String imie) {
this.imie = imie;
}
public String getNazwisko() {
return nazwisko;
}
public void setNazwisko(String nazwisko) {
this.nazwisko = nazwisko;
}
}
Mam wrażenie jakby p:dialog tworzył się tak jakby tylko raz, na samym końcu przez co zawsze zapamiętuje tego ostatnio dodanego do p:datatable usera.
Potrafi ktoś pomóc? nie mogę sobię z tym poradzić, a znają życie błąd jakiś easy :)
Wcześniej próbowałem też zamiast p:dialog użyc p:notoficationBar, ale wtedy to wgl była klapa dopiero
pozdrawiam!