2011-01-27 16 views
5

Voglio capire come JSF sta memorizzando la vista e ripristinando la vista. Ho letto che sta creando l'id della vista separata per ogni vista e memorizzandolo sul server. Quindi recupera. Le seguenti sono le mie domande:Memorizzazione di ID vista in JSF

  • In quale base viene creato e memorizzato l'id?
  • Viene creato in base al JSP dichiarato su faces-config.xml?
  • Fondamentalmente è stato creato per ciascun ID vista JSP?
  • Come vengono passati gli ID di visualizzazione per il rendering della risposta? È passato nel parametro di richiesta?

risposta

8

In quale base viene creato e memorizzato l'ID?

L'ID vista è il percorso relativo al contesto del file di visualizzazione. Per esempio. /foo.jsp o /foo.xhtml. L'implementazione ViewHandler è responsabile della sua creazione e della sua memorizzazione in UIViewRoot.

Viene creato in base alle JSP dichiarate su faces-config.xml?

Questi non devono necessariamente essere dichiarati ovunque in faces-config.xml. Per ogni ingresso richiesta , è estratta dalla richiesta URI dal HttpServletRequest oggetto sottostante dai suoi getPathInfo() o getServletPath() metodi, a seconda che la stessa FacesServlet è mappata con pattern prefisso (/faces/*) o pattern suffisso (*.jsf) rispettivamente.

Quando JSF deve accedere a una nuova vista secondo una <navigation-case> in faces-config.xml, allora la nuova visualizzazione ID viene semplicemente estratto da essa ed una nuova UIViewRoot viene creato il termine della fase azione invoke. In caso contrario, JSF torna alla stessa vista della richiesta originata.

Fondamentalmente è stato creato per ciascun ID vista JSP?

Sì, ogni vista ha il proprio identificativo univoco, che è fondamentalmente solo la sua posizione nel contesto dell'applicazione web.

Come vengono passati gli ID di visualizzazione per il rendering della risposta? È passato nel parametro di richiesta?

Sono memorizzati in UIViewRoot che è a sua volta appena disponibile da FacesContext#getViewRoot(). L'implementazione ViewHandler chiama solo getViewId() durante il metodo renderView().