Domanda

Elaborerò un po'.Jsf è estremamente doloroso da lavorare dal punto di vista del designer, un po' come provare a disegnare un'immagine con le mani legate dietro la schiena, ma è utile per masticare moduli ed elencare molti dati.Quindi i siti che stiamo realizzando nella mia azienda sono pagine di amministrazione jsf e pagine utente jsp.Il problema si verifica quando le pagine utente hanno moduli e cose complicati e jsf inizia a funzionare.

Ecco la domanda:Sono sulla pagina JSP pura.Devo accedere ad alcune pagine jsf che utilizzano il bean di sessione.Come posso inizializzare quel bean?Se fossi sulla pagina jsf, potrei avere qualche commandLink che preparerebbe i dati.L'unica cosa che riesco a trovare è avere una pagina jsf fittizia che farà il lavoro e mi reindirizzerà alla pagina jsf necessaria, ma è un po' brutto e non voglio ritrovarmi con 50 pagine fittizie.Preferirei trovare qualche meccanismo per reinizializzare il bean che è già in sessione con alcuni parametri desiderati.

Modificare:qualche dettaglio in più.In questa situazione specifica, ho test completi o filtrati.È uno stesso test con la stessa logica e tutto, tranne se il test è filtrato, dovrebbe eliminare alcune domande a seconda delle risposte.Facendo clic su un collegamento, dovrebbe avviare un test richiesto in una delle due modalità.I collegamenti fanno parte dell'albero del menu principale e sono visibili su molte pagine jsp sorelle.Il mio compito è avere 4 collegamenti:testA completo, testA filtrato, testB completo, testB filtrato, che conducono tutti alla stessa pagina jsf e TestFormBean deve essere reinizializzato di conseguenza.

Modificare:Ho fatto un po' di ricerche sui facelet e, anche se non mi aiuterà ora, lo terrò sicuramente a mente per il prossimo progetto.

È stato utile?

Soluzione

Per risolvere questo problema probabilmente creerei un frammento JSF che includa solo il tuo modulo, quindi utilizzerei un file <c:import> tag per includerlo nella mia pagina JSF.

Tuttavia, questa soluzione è probabilmente un po' fragile a seconda dell'ambiente.

MODIFICARE:Vedi la risposta di Chris Hall, FacesContext non è disponibile al di fuori di FacesServlet.

Altri suggerimenti

hai esaminato l'utilizzo dei facelet?Ti consente di eliminare tutte le differenze JSF / JSP (è un controller di visualizzazione alternativo e superiore).

Supporta anche un'ottima semantica in fase di progettazione con il tag jsfc...

<input type="text" jsfc="#{SomeBean.property}" class="foo" />

viene tradotto internamente nel materiale JSF corretto, così puoi lavorare con gli strumenti esistenti.

Puoi recuperare un bean gestito all'interno di una libreria di tag utilizzando qualcosa del genere:

FacesContext context = FacesContext.getCurrentInstance();
Object myBean = context.getELContext().getELResolver().getValue(context.getELContext(), null, "myBeanName");

Tuttavia, dovresti utilizzare la libreria di tag da una delle tue pagine JSF.FacesContext.getCurrentInstance() restituisce null quando viene chiamato all'esterno di FacesServlet.

In realtà, ho risolto questo problema rimuovendo il bean dalla sessione, quindi deve essere generato nuovamente quando viene chiamata la pagina jsf.Quindi raccolgo i parametri di recupero da una richiesta nel costruttore.

Crea un gestore di tag JSP personalizzato.È quindi possibile recuperare il bean dall'ambito della sessione e quindi inizializzarlo al volo.Guarda questo tutorial per ulteriori dettagli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top