parameter name bean jsf-2 facescontext externalcontext

jsf-2 - bean - f param name i value 0/>



Cuál es la diferencia entre FacesContext y ExternalContext (1)

Mire cuidadosamente en sus javadocs para ver qué métodos ofrecen y qué hacen exactamente todos esos métodos.

Si observa más de cerca los métodos enumerados en el javadoc, notará que FacesContext generalmente ofrece acceso a artefactos específicos de JSF que de ninguna manera están relacionados con el Servlet "subyacente" o la API de Portlet para los cuales JSF está diseñado para correr encima de. Por ejemplo, la creación de convertidores, validadores, componentes, expresiones EL, etc. y la obtención de información sobre la raíz de la vista, las configuraciones regionales admitidas, etcétera y la adición de oyentes de fase, los detectores de eventos del sistema, etcétera. Todo lo que es específico de JSF API.

Y, ExternalContext generalmente ofrece acceso a los artefactos específicos del portlet o del servlet que JSF utiliza actualmente "debajo de las cubiertas". Por ejemplo, cuando se ejecuta en un contenedor Servlet, la solicitud del servlet HTTP , la respuesta al servlet HTTP , la sesión HTTP y el contexto del servlet e inherentemente también todos sus artefactos. Haga clic en esos enlaces, verá que a su vez ofrecen métodos que también han sido delegados por el ExternalContext , como getRequestParameterMap() . Ver también el javadoc . Sí, también haga clic en ese enlace, verá que menciona explícitamente la solicitud de servlet:

Servlet: debe ser el conjunto de parámetros disponibles a través de los métodos javax.servlet.ServletRequest getParameter() y getParameterNames() .

No hay nada que puedan ofrecer ambos contextos. Entonces no habría absolutamente ninguna razón para preferir el uno o el otro. Simplemente use el adecuado para el trabajo que necesita realizar.

En cuanto a la ID del cliente, de hecho es generada por JSF, pero definitivamente no en el inicio del servidor. Se genera solo para cada componente JSF en función de cada vista. En el caso de componentes de entrada como <h:inputText> , que genera un elemento HTML <input> , también se convierte en el atributo de name como tal

<input type="text" id="formId:inputId" name="formId:inputId" ... />

El formId:inputId es exactamente el ID del cliente JSF. Se convierte en el nombre del parámetro de solicitud. La representación HTML del botón de comando también tiene un name que termina como nombre de parámetro de solicitud con el valor del botón como valor de parámetro.

¿Cuál es la diferencia entre FacesContext y ExternalContext ? ¿Cuándo puedo usar uno u otro? ¿Qué tiene el uno y qué tiene el otro?

El siguiente ejemplo es del libro JavaServer Faces 3rd edition:

<h:commandButton ... actionListener="#{rushmore.handleMouseClick}" />

Backing Bean:

public void handleMouseClick(ActionEvent e) { FacesContext context = FacesContext.getCurrentInstance(); String clientId = e.getComponent().getClientId(context); Map<String, String> requestParams = context.getExternalContext().getRequestParameterMap(); // ... }

¿Por qué es el parámetro de solicitud en ExternalContext ? ¿Qué es clientId ? ¿Es generado por JSF cuando se inicia la aplicación?