2017-08-16 1 views
0

Je travaille sur une application dans JSF pour gérer les déplacements effectués par les personnes dans les différents bureaux de mon entreprise. (je vais essayer de garder le code au minimum nécessaire)JSF getRowData sur l'élément imbriqué dans la table de données

J'ai un voyage d'objet, un bureau d'objet, et un objet d'aide OfficeWithTrips:

public class Trip { 
    private BigDecimal id; 
    private BigDecimal officeId;   
    // getters and setters 
} 

public class OfficeWithTrips { 
    private Office office; 
    private DataModel<Trip> trips; 
    // getters and setters 
} 

L'application comporte deux pages: celle où chaque gestionnaire voit les bureaux qu'il doit gérer et les voyages de chaque bureau, et un autre avec le détail d'un seul voyage.

J'ai un haricot de session qui contient la liste des bureaux avec leurs voyages:

public class TripsListBean implements Serializable { 
    private DataModel<OfficeWithTrips> officesWithTrips;  
    private Trip currentTrip = new Trip(); 
    // getters and setters 
} 

Sur la page principale, je passe par les « bureaux » du haricot, qui a une liste imbriquée de voyages. Chaque table de bureau avec sa liste de voyages a un pied de page avec un bouton "ajouter un nouveau voyage". Lorsque je clique sur "ajouter un nouveau trajet", je veux pouvoir définir l'identifiant du bureau dans le voyage. Ce que je fais dans la méthode « addTrip() » est la suivante:

public String addTrip() { 
    OfficeWithTrips officeWithTrips = tripsListBean.getOfficesWithTrips().getRowData(); 
    Trip trip = new Trip(); 
    trip.setOfficeId(officeWithTrips.getOffice.getId()); 
    tripsListBean.setCurrentTrip(trip); 
    return TRIP_DETAIL_URL; 
} 

Mon problème est que dans addTrip l'indice officesWithTrips est toujours 0, quand je veux ajouter un voyage au second bureau dans la liste il doesn ne fonctionne pas (il retourne toujours le premier bureau).

Quelqu'un peut-il détecter l'erreur? Je suppose que que lorsque je clique sur le bouton « ajouter du nouveau voyage », cela crée l'index dans la officeWithTrips.trips dataModel, mais pas dans tripsListBean.officesWithTrips ...

Répondre

0

J'ai résolu ce avec un autre setPropertyActionListener: J'ai ajouté une Office currentOffice à TripsListBean et définir cela avec un setPropertyActionListener directement sur la page jsf. Fondamentalement, le même que je fais pour currentTrip