====== Añadir Cookies y Headers HTTP en navegaciones de ficheros pages.xml o .page.xml ====== Modificaciones para tener más opciones para trabajar con Cookies y Headers HTTP. ===== Cabeceras HTTP ===== Hasta ahora podiamos añadir //Headers HTTP// en los ficheros //pages.xml// o //.page.xml// de manera global. Ahora lo podemos hacer especificando en que navegaciones o errores se quieren añadir. Además se ha añadido el atributo //if// (expresión EL) y //on-postback// (true/false) para poder condicionar si se añade esa cabecera. Ejemplo de lo que hasta ahora era posible realizar:
Con esta configuración, se añade la cabecera //My-Header// en la respuesta de cualquier navegación desde la página actual. Ejemplo de añadir una cabecera al ////.
Con esta configuración, se añade la cabecera //My-Header// cuando se ejecuta el ////. Ejemplo de añadir una cabecera al ////.
Con esta configuración, se añade la cabecera //My-Header// cuando se ejecuta el ////. \\ ==== Cabeceras en Excepciones o Errores HTTP ==== Podemos definir ante excepciones, si queremos realizar una navegacion a una página o devoler un error HTTTP. Estas configuraciones se pueden realizar mediante el fichero //pages.xml// o mediante anotaciones en clases de Excepción. \\ === Definiciones en pages.xml === Para definir la navegación a una página o devovler un error HTTP en el fichero //pages.xml//. Ejemplo de navegación como respuesta auna excepción no controlada: #{messages['org.jboss.seam.security.AuthorizationException']} Donde si se produce la excepción //org.jboss.seam.security.AuthorizationException// navegamos a la página ///error.xhtml// mostrando un mensaje. Ejemplo de respuesta con error HTTP: Donde si se produce la excepción //org.jboss.seam.ConcurrentRequestTimeoutException// se devuelve el error HTTP 503.\\ Ahora podemos además, añadir cabeceras HTTP en las respuestas: #{messages['org.jboss.seam.security.AuthorizationException']}
\\ === Definiciones en Clases JAVA === Ahora vamos a ver el equivalente mediante anotaciones. Para realizar una navegación como respuesta a una excepción no tratada, usamos la //@Redirect//. Ahora tenemos disponible la propiedad //headers//, que nos permite añadir anotaciones //@Header//, con los datos de la cabecera. Ejemplo: package es.um.atica.prueba.exceptions; import org.jboss.seam.annotations.exception.Cookie; import org.jboss.seam.annotations.exception.Header; import org.jboss.seam.annotations.exception.Redirect; @Redirect( viewId = "/paginas/home.seam", headers = { @Header(name = "annotation_header", value = "#{cookieManager.value}") }) public class RedirectException extends RuntimeException { } Cuando se lance la excepción //es.um.atica.prueba.exceptions.RedirectException// y no sea tratada, automaticamente se realizara una navegación a la página ///paginas/home.seam// y en la respuesta se añade la cabecera //annotation_header//.\\ Para devolver un error HTTP ante una excepción no tratada, utilizamos la anotación //@HttpError//.Ahora tenemos disponible la propiedad //headers//, que nos permite añadir anotaciones //@Header//, con los datos de la cabecera. Ejemplo: package es.um.atica.prueba.exceptions; import org.jboss.seam.annotations.exception.Cookie; import org.jboss.seam.annotations.exception.Header; import org.jboss.seam.annotations.exception.Redirect; @HttpError( errorCode = 503, message = "#{messages['my.error.menssage']}" headers = { @Header(name = "annotation_header", value = "#{cookieManager.value}") }) public class HttpErrorException extends RuntimeException { } Cuando se lance la excepción //es.um.atica.prueba.exceptions.HttpErrorException// y no sea tratada, automaticamente se devuelve el error HTTP 503 y en la respuesta se añade la cabecera //annotation_header//. \\ ==== Atributos ==== Los atributos de la etiqueta //
// son los siguientes: * **//name //**: es obligatorio y permite añadir cualquier cadena de caracteres sin espacios al inicio y al final. * **//value //**: permite añadir cualquier cadena de caracteres sin espacios al inicio y al final o una expresion EL. * **//if //**: condición a cumplir para incluir la cabecera en la respuesta. Por defecto valor //true//. Admite los valores //true//, //false// o una expresión EL que devuelva un balor booleano. * **//on-postback //**: indica si se añade la cabecera en la respuesta a una petición //POST//. Por defecto valor //true//. Admite los valores //true//, //false//. ===== Cookies HTTP ===== Hasta ahora **//NO//** podiamos añadir //Cookies HTTP// en los ficheros //pages.xml// o //.page.xml//. Ahora lo podemos hacer de manera global a una página o especificando en que navegaciones o errores se quieren añadir. Además se ha añadido el atributo //if// (expresión EL) y //on-postback// (true/false) para poder condicionar si se añade esa cabecera. Ejemplo de uso para añadir cookie a de manera global a una página: Con esta configuración, se añade la cookie //My-Cookie// en la respuesta de cualquier navegación desde la página actual. Ejemplo de añadir una cabecera al ////. Con esta configuración, se añade la cookie //My-Cookie// cuando se ejecuta el ////. Ejemplo de añadir una cabecera al ////. Con esta configuración, se añade la cookie //My-Cookie// cuando se ejecuta el ////. ==== Cookies en Excepciones o Errores HTTP ==== \\ === Definiciones en pages.xml === Ahora podemos además, añadir cookies HTTP en las respuestas: #{messages['org.jboss.seam.security.AuthorizationException']} \\ === Definiciones en Clases JAVA === Ahora vamos a ver el equivalente mediante anotaciones. Para realizar una navegación como respuesta a una excepción no tratada, usamos la //@Redirect//. Ahora tenemos disponible la propiedad //cookies//, que nos permite añadir anotaciones //@Cookie//, con los datos de la cookie. Ejemplo: package es.um.atica.prueba.exceptions; import org.jboss.seam.annotations.exception.Cookie; import org.jboss.seam.annotations.exception.Header; import org.jboss.seam.annotations.exception.Redirect; @Redirect( viewId = "/paginas/home.seam", cookies = { @Cookie(name = "annotation_cookie", value = "#{cookieManager.value}", path = "/miPath") }) public class RedirectException extends RuntimeException { } Cuando se lance la excepción //es.um.atica.prueba.exceptions.RedirectException// y no sea tratada, automaticamente se realizara una navegación a la página ///paginas/home.seam// y en la respuesta se añade la cookie //annotation_cookie//.\\ Para devolver un error HTTP ante una excepción no tratada, utilizamos la anotación //@HttpError//.Ahora tenemos disponible la propiedad //cookies//, que nos permite añadir anotaciones //@Cookie//, con los datos de la cabecera. Ejemplo: package es.um.atica.prueba.exceptions; import org.jboss.seam.annotations.exception.Cookie; import org.jboss.seam.annotations.exception.Header; import org.jboss.seam.annotations.exception.Redirect; @HttpError( errorCode = 503, message = "#{messages['my.error.menssage']}" cookies = { @Cookie(name = "annotation_cookie", value = "#{cookieManager.value}", path = "/miPath") }) public class HttpErrorException extends RuntimeException { } Cuando se lance la excepción //es.um.atica.prueba.exceptions.HttpErrorException// y no sea tratada, automaticamente se devuelve el error HTTP 503 y en la respuesta se añade la cookie //annotation_cookie//. \\ ==== Atributos ==== Los atributos de la etiqueta //// son los siguientes: * **//name //**: es obligatorio y permite añadir cualquier cadena de caracteres sin espacios al inicio y al final. * **//value //**: permite añadir cualquier cadena de caracteres sin espacios al inicio y al final o una expresion EL. * **//comment //**: permite añadir cualquier cadena de caracteres sin espacios al inicio y al final o una expresion EL. * **//domain //**: permite añadir cualquier cadena de caracteres sin espacios al inicio y al final o una expresion EL. * **//max-age //**: permite añadir valores enteros o una expresión EL que devuelva un valor entero, por defecto //-1//. * **//path //**: permite añadir cualquier cadena de caracteres sin espacios al inicio y al final o una expresion EL. Por defecto "/". * **//secure //**: permite añadir valores booleanos o una expresión EL que devuelva un valor booleano, por defecto //false//. * **//version //**: permite añadir valores enteros o una expresión EL que devuelva un valor entero, por defecto 0. * **//http-only //**: permite añadir valores booleanos o una expresión EL que devuelva un valor booleano, por defecto //true//. * **//if //**: condición a cumplir para incluir la cabecera en la respuesta. Por defecto valor //true//. Admite los valores //true//, //false// o una expresión EL que devuelva un balor booleano. * **//on-postback //**: indica si se añade la cabecera en la respuesta a una petición //POST//. Por defecto valor //true//. Admite los valores //true//, //false//. ---- --- //[[juanmiguel.bernal@ticarum.es|JUAN MIGUEL BERNAL GONZALEZ]] 28/01/2020 11:44//