Associazione di componenti JSF senza proprietà bean

Come funziona esattamente il seguente codice:

#{aaa.id}  

Voglio dire, di solito il collegamento del componente funziona, specificando una proprietà (di tipo UIComponent) in un bean. Qui, non ci sono bean né proprietà ma tuttavia il nome “aaa” viene associato correttamente (visualizzando l’id del componente – “txt1”). Come funziona / dove è specificato?

Grazie

AGGIORNAMENTO: La specifica JSF2.0 (capitolo 3.1.5) dice: “Un legame di componente è un’espressione di valore speciale che può essere usata per facilitare” colbind “un’istanza di componente a una proprietà corrispondente di un JavaBean … L’espressione di valore specificata deve puntare a una proprietà JavaBeans di lettura-scrittura di tipo UIComponent (o sottoclass appropriata). ”

È stato inserito nell’oscilloscopio EL predefinito durante la creazione dell’albero delle viste (in quel momento vengono valutati tutti binding attributi di binding e gli attributi dei gestori di tag come JSTL e JSF ). Viene mostrato da normali mezzi EL durante il rendering dell’albero della vista. Il rendering dell’albero della vista avviene dopo la costruzione dell’albero della vista, quindi funziona in questo modo. Non è che questo codice funzioni “linea per linea” come ti aspettavi dalla fonte.

Non posso indicarti un singolo riferimento dove è stato specificato come non ce n’è. Dovresti leggere separatamente le specifiche EL e JSF e fare 1 + 1 = 2.

Tra l’altro, per evitare confusione tra i nuovi sviluppatori e per evitare conflitti con le variabili esistenti negli ambiti EL, è ansible utilizzare un java.util.HashMap nell’ambito della richiesta che è stato dichiarato come segue in faces-config.xml :

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

ed è stato usato come segue

 #{components.aaa.id}  

che è più auto-documentante.

Guarda anche:

  • Come funziona l’attributo ‘binding’ in JSF? Quando e come dovrebbe essere usato?