====== 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//