En este segundo post sobre managed beans, vamos a ver cómo inicializar las propiedades de un bean, qué pasa cuando son propiedades de tipo array, List o Map y cómo declarar un bean directamente como un List o un Map.
¿Cómo inicializamos las propiedades de un bean?
¿Cómo inicializamos las propiedades de un bean?
- Utilizando anotaciones
En <value> podemos hacer referenciar a otro bean como #{adress}. También podemos poner a null una propiedad:
¿Cómo inicializamos propiedades de tipo array o java.util.List?
Tenemos que hacerlo en el fichero faces-config.xml y no con anotaciones, ya que no existe ninguna sintáxis que nos permita hacerlo.
Desde nuestra página JSF, podemos acceder a estos valores: <h:outputText value="#{userBean.colores[2]}"/>. El por qué accedemos de esta manera a las propiedades de un bean lo veremos en un post posterior, ahora quedaros con la idea.
Si nuestro array no contiene Strings, como en el ejemplo anterior, sino por ejemplo enteros, tendríamos que indicarlo de la siguiente manera:
¿Cómo inicializamos propiedades de tipo java.util.Map?
También tenemos que hacerlo en el fichero faces-config.xml.
Desde nuestra página JSF, podemos acceder a estos valores: <h:outputText value="#{userBean.colores['Verde']}"/> Como ya hemos visto antes, aquí se utilizan Strings por defecto. Si quisiéramos que nuestras keys fueran enteros, haríamos lo siguiente:
¿Cómo declaramos un List o Map como un managed bean directamente?
Si nos fijamos en el ejemplo, vemos que el scope del bean se ha puesto a none. Esto significa que el bean no va a ser almacenado en ningún sitio, sino que va a ser instanciado siempre que se necesite.
También podemos hacer que un bean referencie a otro bean de la siguiente manera:
Con anotaciones sería:
@ManagedBean @SessionScoped public class UserBean { @ManagedProperty(value="Ana") private String name ... }- Utilizando el fichero faces-config.xml
<managed-bean> <managed-bean-name>userBean</managed-bean-name> <managed-bean-class>com.examples.UserBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>name</property-name> <value>Ana</value> </managed-property> </managed-bean>
En <value> podemos hacer referenciar a otro bean como #{adress}. También podemos poner a null una propiedad:
<managed-property> <property-name>nick</property-name> <null-value/> </managed-property>
¿Cómo inicializamos propiedades de tipo array o java.util.List?
Tenemos que hacerlo en el fichero faces-config.xml y no con anotaciones, ya que no existe ninguna sintáxis que nos permita hacerlo.
<managed-property> <property-name>colores</property-name> <list-entries> <value>Rojo</value> <value>Verde</value> <value>Amarillo</value> </list-entries> </managed-property>
Desde nuestra página JSF, podemos acceder a estos valores: <h:outputText value="#{userBean.colores[2]}"/>. El por qué accedemos de esta manera a las propiedades de un bean lo veremos en un post posterior, ahora quedaros con la idea.
Si nuestro array no contiene Strings, como en el ejemplo anterior, sino por ejemplo enteros, tendríamos que indicarlo de la siguiente manera:
<managed-property> <property-name>numHabitaciones</property-name> <list-entries> <value-class>java.lang.Integer</value-class> <value>1</value> <value>2</value> <value>3</value> </list-entries> </managed-property>
¿Cómo inicializamos propiedades de tipo java.util.Map?
También tenemos que hacerlo en el fichero faces-config.xml.
<managed-property> <property-name>colores</property-name> <map-entries> <map-entry> <key>Rojo</key> <value>No puedes continuar</value> </map-entry> <map-entry> <key>Verde</key> <value>Puedes continuar</value> </map-entry> </map-entries> </managed-property>
Desde nuestra página JSF, podemos acceder a estos valores: <h:outputText value="#{userBean.colores['Verde']}"/> Como ya hemos visto antes, aquí se utilizan Strings por defecto. Si quisiéramos que nuestras keys fueran enteros, haríamos lo siguiente:
<map-entries> <key-class>java.lang.Integer</key-class> <map-entry> <key>1</key> ... </map-entries>
¿Cómo declaramos un List o Map como un managed bean directamente?
<managed-bean-name>colores</managed-bean-name> <managed-bean-class>java.util.ArrayList</managed-bean-class> <managed-bean-scope>none</managed-bean-scope> <list-entries> <value>Rojo</value> <value>Amarillo</value> <value>Verde</value> </list-entries> </managed-bean>
Si nos fijamos en el ejemplo, vemos que el scope del bean se ha puesto a none. Esto significa que el bean no va a ser almacenado en ningún sitio, sino que va a ser instanciado siempre que se necesite.
También podemos hacer que un bean referencie a otro bean de la siguiente manera:
<managed-bean> <managed-bean-name>datosBean</managed-bean-name> <managed-bean-class>com.examples.DatosPersonalesBean</managed-bean-class> <managed-bean-scope>none</managed-bean-scope> </managed-bean> <managed-bean> <managed-bean-name>userBean</managed-bean-name> <managed-bean-class>com.examples.UserBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>datos</property-name> <value>#{datosBean}</value> </managed-property> </managed-bean>
Con anotaciones sería:
@ManaqedProperty(value="#{datosBean}") private DatosPersonalesBean datos;
Comentarios
Publicar un comentario