viernes, 29 de octubre de 2010

Seam: Controlar conversaciones en la vista

Si queremos terminar una conversación mediante un enlace o botón hay que tener en cuenta lo siguiente:
- Si nuestra acción no produce una redirección a otra página no debemos usar ni <s:link> ni <s:button> ya que aunque indiquemos propagation="end", esto sólo introduce en la URL un parámetro que indica que se debe terminar la conversación y es en la navegación a la vista destino cuando se lee dicho parámetro y se termina la conversación. En su lugar usaremos <h:commandbutton>,<a4j:commandbutton>, <h:commandlink> o <a4j:commandlink> con la etiqueta <s:conversationpropagation type="end"> anidada.

lunes, 25 de octubre de 2010

JSF: Pasar acción como parámetro en panel modal

El escenario es el siguiente:
- Tengo un modal panel con un backbean/controlador de dicho moda panel
- Este modal panel se va a usar en distintas vistas
- Tiene una misma acción que en cada vista ejecuta un método distinto

Solución 1:
- Crear en el controlador un método para cada acción
- Enviar como parámetro o en cualquier propiedad del controlador la acción que se debe ejecutar
- En el modal panel deben existir un commandLink por cada acción y usar el parámetro anterior
para determinar cual renderizar

Solución 2(a probar):
- Pasar la acción como parámetro y usar la clase org.jboss.seam.core.Expressions para invocar el método.

lunes, 18 de octubre de 2010

JSF: Método para saber si una petición es postback

protected boolean isPostBack() {
FacesContext facesContext = FacesContext.getCurrentInstance();
return facesContext.getRenderKit().getResponseStateManager().isPostback(facesContext);
}

domingo, 5 de septiembre de 2010

JSF: Obtener ServletContext

Obtener el objeto ServletContext para obtener la ruta real de cualquier directorio de nuestra aplicación. Útil para guardar ficheros:

ExternalContext external = FacesContext.getCurrentInstance().getExternalContext();
ServletContext servletContext = (ServletContext) external.getContext();
String path = servletContext.getRealPath("/..");

viernes, 6 de agosto de 2010

Propagación del contexto de persistencia

La propagación de contexto de persistencia se produce sólo para los EntityManager gestionados por el contenedor. En un EntityManager gestionado por el contenedor en el contexto de una transacción (caso común en un entorno Java EE), la propagación de transacciones JTA es la misma que la del contexto de persistencia. En otras palabras, los EntityManagers gestionados con ámbito de transacción obtenidos dentro de una misma transacción JTA comparten el mismo contexto de persistencia. En términos de Hibernate, esto significa que todos los gestores comparten la misma sesión.

Importante: el contexto de persistencia nunca es compartido por diferentes transacciones JTA o entre EntityManagers que no vienen del mismo EntityManagerFactory. Hay algunas
excepciones dignas de mención para la propagación del contexto al utilizar contextos extendidos de persistencia:

• Si, un SLSB, MDB o SFSB con un contexto de persistencia en ámbito de transacción invoca un método de un SFSB con contexto de persistencia extendido en la misma transacción JTA, se lanza una IllegalStateException.

• Si un SFSB con un contexto de persistencia extendido invoca a un SLSB o SFSB con contexto de persistencia de ámbito de transacción dentro de la misma transacción JTA, el contexto persistencia se propaga.

• Si un SFSB con un contexto de persistencia extendido llama a un SFSB o SLSB dentro de un contexto distinto de transacción JTA, el contexto de persistencia no se propaga.

• Si un SFSB con un contexto de persistencia extendido instancia otro SFSB con un contexto de persistencia extendido, el contexto de persistencia extendido es heredado por el segundo SFSB. Si el segundo SFSB sesión se llama con un contexto de transacción diferente que el primero, un IllegalStateException es lanzada.

• Si un SSB con contexto de persistencia extendido llama a un SFSB con un contexto persistencia extendido diferente en la misma transacción, una IllegalStateException es lanzada.