Mam stronę, która wyświetla listę wszystkich użytkowników i posiada opcję edycji oraz usuwania ich. Próbuje zrobić, aby po wciśnięciu przycisku edycja przy danym użytkowniku przeszło na nową stronę edit.xhtml i tam ukazały się dane tegoż użytkownika i można było je swobodnie edytować. Aby pobrać danego użytkownika użyłem:
<f:setPropertyActionListener target="#{uzytkownikBean.uzytkownik}" value="#{uzy}"/>
Zmienna uzy to zmienna typu List<Uzytkownicy> znajdująca się w moim managedBeanie JSF. Niestety po wciśnięciu przycisku edytuj nie zostaje on zapisany i w oknie edit.xhtml wszystkie pola do edycji są puste, a chciałem aby były wypełnione danymi tegoż użytkownika. Oznacza to, że chyba ActionListener nie zapisał tego do zmiennej uzytkownik. Czemu się tak stało, co zrobiłem źle? Starałem się postępować zgodnie z przykładem znalezionym w internecie. Co ciekawe jeśli zmienię w
<f:setPropertyActionListener target="#{uzytkownikBean.uzytkownik}" value="#{uzy}"/>
value na
value=u"#{zytkownikBean.uzytkownik}
to po wciśnięciu edytuj wywala mi błąd:
Cannot convert [pl.ePrzychodnia.model.Uzytkownik[ uzytkownikid=1 ], pl.ePrzychodnia.model.Uzytkownik[ uzytkownikid=2 ]] of type class java.util.Vector to class pl.ePrzychodnia.model.Uzytkownik
Czemu się tak dzieje? Przecież uzy jest deklarowane na początku tabeli:
<h:dataTable value="#{uzytkownikBean.uzytkownicy}" var="uzy">
więc jest to chyba to samo? A w pierwszym przypadku przechodzi do strony edit.xhtml a w drugim wywala błąd.
<?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:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
<title>Panel Admina</title>
</h:head>
<h:body>
<f:view>
<h:form>
<h1>Panel admina</h1>
<h:commandLink action="./add.xhtml" value="Dodaj użytkownika"/>
<h:dataTable value="#{uzytkownikBean.uzytkownicy}" var="uzy">
<h:column>
<f:facet name="header">
<h:outputText value="Imie"></h:outputText>
</f:facet>
<h:outputText value="#{uzy.imie}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Nazwisko"></h:outputText>
</f:facet>
<h:outputText value="#{uzy.nazwisko}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Edytuj"></h:outputText>
</f:facet>
<h:commandLink action="./edit.xhtml" value="Edytuj">
<f:setPropertyActionListener target="#{uzytkownikBean.uzytkownik}" value="#{uzy}"/>
</h:commandLink>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Usuń"></h:outputText>
</f:facet>
<h:commandLink action="#{uzytkownikBean.deleteUzytkownik()}" value="Usuń">
<f:param name="uzytkownikId" value="#{uzy.uzytkownikId}"/>
</h:commandLink>
</h:column>
</h:dataTable>
</h:form>
</f:view>
</h:body>
</html>
ManagedBean JSF
@Named(value = "uzytkownikBean")
@SessionScoped
public class UzytkownikBean implements Serializable {
@EJB
private UzytkownikDaoLocal uzytkownikDao;
private List<Uzytkownik> uzytkownicy;
private Uzytkownik uzytkownik = new Uzytkownik();;
private Integer uzytkownikId;
private String login;
private String password;
private String dbusername;
private String dbpassword;
private String typ;