viernes, 23 de mayo de 2014

Cambiar el skin de una aplicación en tiempo de ejecución

Resumen: En este articulo vamos a ver cómo cambiar en tiemo de ejecución un skin. (change skin in runtime)

El skin hasta ahora lo hemos visto como un valor constante que está definido en el fichero
- trinidad.config.xml (en ADF 11g)
o bien
- adf-faces-config.xml en ADF 10g.

Como hemos visto en ambas versiones la filosofía de registro y uso de skins es similar.

<?xml version="1.0" encoding="windows-1252"?>
<trinidad-config xmlns="http://myfaces.apache.org/trinidad/config">
  <skin-family>skinEjemplo</skin-family>
</trinidad-config>

Imaginemos que queremos un skin diferente para cada idioma, o para cada tipo de usuario.
Una solución es tener un unico skin que tenga los estilos de cada idioma. Esto nos obligaría a tener en las páginas estilos "algo" que indicara al skin que está en una página en un idioma y no está en otro.
La otra opción es tener varios ficheros de skin, uno para cada idioma, y que en tiempo de ejecución se elija el adecuado.

Para ello, el elemento skin-family, se colocará una expresión que sea válida durante toda la sesión, de manera que el skin que se seleccione se hará de acuerdo al valor de dicha expresión.

Por ejemplo:

<skin-family>#{sessionScope.skinFamily}</skin-family>

<skin-family>#{facesContext.viewRoot.locale.language=='de' ? 'german' : 'english'}</skin-family> 

Como indicamos, es una expresión. En el primer caso es una expresión que se refiere al valor resultante del método getSkinFamily() dentro del bean sessionScope.
En el segundo caso, utilizamos una expresión condicional a partir de la variable de contexto facesContext.viewRoot.locale.language.

La indicación de que sean valores de sesión, es importante, porque en valores que provengan de beans de tipo request, podemos tener valores inesperados, pues el bean se vuelve a crear cada vez que es llamado, por lo que si durante ese método se realizan operaciones podemos tener valores no esperados en el skin-family.

Referencias:
Conditionally Changing Skins for Users (11g)
http://docs.oracle.com/cd/E25178_01/webcenter.1111/e10148/jpsdg_skin.htm

Developing and Using ADF Faces Skins. Jonas Jacobi (10g)
http://www.oracle.com/technetwork/developer-tools/jdev/index-092146.html
Si te ha gustado este artículo, puedes seguir el blog por Blogger o Twitter

No hay comentarios:

Publicar un comentario