Tout d'abord ne pas oublier de remplacer return "View"
par return "View2"
, et de même pour toutes les autres pages JSF (Edit, Create, Edit).
Il faut récupérer la valeur du paramètre passé par List2.xhtml et récupérer l'employé en utilisant l'EJB façade :
public String prepareView() { current = getCurrent(); return "View2"; } /** * Récupère le paramètre pour avoir l'employé en cours */ private Employe getCurrent() { ExternalContext ctx = FacesContext.getCurrentInstance().getExternalContext(); String idEmploye = ctx.getRequestParameterMap().get("idEmploye"); int id = Integer.parseInt(idEmploye); return ejbFacade.find(id); }
Pour faire marcher la modification, il faudra ajouter readOnly="true" pour la propriété id (sinon vous aurez un message d'erreur disant que la propriété id n'est pas une propriété "writable".
Pour prepareList, il faut appeler recreateModel
qui met employes
à null
pour que la table aille rechercher les employés afin que les modifications effectués avant puissent se voir dans la table :
public String prepareList() { recreateModel(); return "List2"; } private void recreateModel() { employes = null; }
public String destroy() { current = getCurrent(); performDestroy(); recreateModel(); return "List2"; } /** * Appelé depuis View. * La différence avec destroy est que current est déjà bon ; * pas besoin d'appeler getCurrent (qui d'ailleurs ne marcherait pas * car on n'a pas le bon paramètre). * @return */ public String destroyAndView() { performDestroy(); recreateModel(); return "List2"; }