Cerca attentamente nei loro javadoc per vedere quali metodi offrono e quali sono esattamente tutti quei metodi.
Se si guarda più da vicino a quei metodi elencati nella javadoc, si noterà che il FacesContext
generalmente offre l'accesso a JSF-specifici manufatti che sono più in alcun modo correlato al "sottostante" API Servlet o Portlet per il quale JSF è stato progettato per essere eseguito su. Per esempio. creando convertitori, validatori, componenti, espressioni EL, eccetera e ottenendo informazioni su view root, localizzazioni supportate, eccetera e aggiungendo listener di fase, listener di eventi di sistema, eccetera. Tutto ciò che è specifico per l'API JSF.
E, ExternalContext
in genere offre l'accesso a risorse utente specifiche del servlet o del portlet che JSF sta attualmente utilizzando "sotto le copertine". Ad esempio, quando si esegue su un contenitore Servlet, HTTP servlet request, e Servlet context e intrinsecamente anche tutti i relativi artefatti. Fai clic su questi collegamenti, vedrai che a loro volta offrono metodi che sono stati anche delegati dallo ExternalContext
, come ad esempio getRequestParameterMap()
. Vedi anche the javadoc. Sì, clicca anche quel link, vedrai che menziona esplicitamente la richiesta di servlet:
Servlet: Questo deve essere il set di parametri disponibili tramite i metodi javax.servlet.ServletRequest
getParameter()
e getParameterNames()
.
Non c'è niente di che può essere offerto dai entrambi contesti. Quindi non ci sarebbe assolutamente alcun motivo per preferire l'uno o l'altro. Usa quello giusto per il lavoro che devi eseguire.
Per quanto riguarda l'ID cliente, è effettivamente generato da JSF, ma sicuramente non all'avvio del server. È appena generato per ogni singolo componente JSF su una base per visualizzazione. In caso di componenti di input come <h:inputText>
, che genera un elemento HTML <input>
, diventa anche l'attributo name
questo modo
<input type="text" id="formId:inputId" name="formId:inputId" ... />
Il formId:inputId
è esattamente il client ID JSF. Diventa il nome del parametro di richiesta. La rappresentazione HTML del pulsante di comando ha anche un name
che termina come nome del parametro di richiesta con il valore del pulsante come valore del parametro.