Creazione della tabella dei dettagli master e della finestra di dialogo, come riutilizzare la stessa finestra di dialogo per creare e modificare

Sto tentando di creare una finestra di dialogo che serva allo scopo sia di creare oggetti che di aggiornarli. Quindi, se mi capita di fare clic sul pulsante “nuovo”, mi verrà presentata una finestra di dialogo contenente i campi vuoti da compilare o se faccio clic su un pulsante di modifica per una voce, i dati di questa voce verranno presentati nella finestra di dialogo per l’aggiornamento.

Seguendo l’esempio nella vetrina primefaces per la versione 5.2, posso presentare i dati in un formato outputText di sola lettura, tuttavia quando lo cambio in un testo di input, il campo rimane vuoto. Il seguente codice è un esempio di ciò che ho:

 

Guest List




Il metodo hasSelected () valuta se il guest selezionato è nullo o no, restituendo true se non nullo. Il SelectedGuest deve essere impostato quando si fa clic sul pulsante command in modo che un object sia disponibile per il recupero dalla finestra di dialogo, tuttavia, con i traccianti nel get / set per SelectedGuest, non vedo il setter chiamato con lo snippet sopra riportato. Se rimuovo l’ inputText , anche se hasSelected sta ancora restituendo false, e quindi il ‘New Guest’ sta andando nella finestra di dialogo, outputText è riempito con un valore.

    Ho trovato questo fantastico post che parla dell’ordine di esecuzione rispetto all’azione, all’ascoltatore di azioni, ecc., Ma non penso che questo sia proprio il mio problema: Differenze tra azione e azioneListener .

    Quindi la domanda definitiva è perché il mio setter verrà chiamato con il pulsante di comando quando ho solo un outputText, ma con un inputText, non lo vedo mai chiamato nel registro?

    Apprezzo il tempo e aiuto che chiunque può fornire.

    Anche se risolviamo il tuo problema, questo costrutto

      

    non funzionerà mai. È necessario fare riferimento a una proprietà del modello, non a una stringa vuota.

    È meglio riutilizzare il modulo di modifica e lasciare che il pulsante di creazione precluda un’ quadro vuota. Ciò semplificherebbe molto dal punto di vista. Sarebbe più facile se l’ quadro avesse una proprietà @Id che è presente solo quando è persistente nel database.

    Ecco un esempio di kickoff:

       #{entity.foo} #{entity.bar}               

    Con questo bean @ViewScoped :

     private List entities; // +getter private Entity entity; // +getter @EJB private EntityService entityService; @PostConstruct public void load() { entities = entityService.list(); entity = null; } public void add() { entity = new Entity(); } public void edit(Entity entity) { this.entity = entity; } public void save() { entityService.save(entity); // if (id==null) em.persist() else em.merge() load(); } public void delete(Entity entity) { entityService.delete(entity); // em.remove(em.find(type, id)) load(); } 

    Guarda anche:

    • Creazione di pagine di dettaglio master per quadro, come collegarle e quale ambito di bean scegliere
    • Mantieni la finestra di dialogo p: aperta quando si verifica un errore di convalida dopo l’invio