Enlace de componente JSF sin propiedad de frijol

¿Cómo funciona exactamente el siguiente código?

#{aaa.id}  

Quiero decir, normalmente el enlace de componente funciona, especificando una propiedad (de tipo UIComponent) en un bean. Aquí, no hay beans ni propiedades, pero el nombre “aaa” se enlaza correctamente (mostrando el id del componente – “txt1”). ¿Cómo funciona / dónde se especifica?

Gracias

ACTUALIZACIÓN: La especificación JSF2.0 (Capítulo 3.1.5) dice: “Un enlace de componente es una expresión de valor especial que se puede utilizar para facilitar el” cableado “de una instancia de componente a una propiedad correspondiente de un JavaBean … La ValueExpression especificada debe apuntar a una propiedad JavaBeans de lectura y escritura de tipo UIComponent (o subclase apropiada) “.

Se ha incluido en el scope de EL predeterminado durante la creación del árbol de vistas (es cuando se están evaluando todos binding atributos de binding y los atributos de los controladores de tags como JSTL y JSF ). Se muestra por medio de EL normal durante la representación del árbol de vista. La representación del árbol de vista ocurre después de la construcción del árbol de vista, por lo que funciona de esa manera. No es que este código se ejecute “línea por línea” como parecía esperar de la fuente.

No puedo señalarle una sola referencia donde haya sido especificada ya que no hay ninguna. Tendría que leer tanto la especificación EL como la especificación JSF por separado y hacer un 1 + 1 = 2.

Por cierto, para evitar confusiones entre los nuevos desarrolladores y para evitar conflictos con las variables existentes en los ámbitos EL, puede usar java.util.HashMap en el scope de la solicitud, que se ha declarado como sigue en faces-config.xml :

  Holder of all component bindings. components java.util.HashMap request  

y se ha usado de la siguiente manera

 #{components.aaa.id}  

que es más autodocumentado

Ver también:

  • ¿Cómo funciona el atributo ‘vinculante’ en JSF? ¿Cuándo y cómo se debe usar?