domingo, 5 de febrero de 2012

MessagesFactory en JSF2

Parece ser que en JSF2 no esta disponible para usar la clase MessagesFactory, por lo que no podemos crear con la API disponible un mensaje parametrizado para mostrar por pantalla. Esto si es posible hacerlo con un mensaje de validación pero no con cualquiera de otro tipo. Por lo que ahora vamos a explicar como crear una clase MessagesFactory propia para poder realizar esto mismo que no nos ofrece JSF2.

Esta clase, que para mayor utilidad será final y se accederá a sus métodos de forma estática. Tendrá dos atributos. Uno es el objeto Locale que permitirá la realización de mensajes para los diferentes idiomas, y otro es el objeto Bundle que contienen la información del fichero con los mensajes a mostrar. Podemos tener un objeto Bundle diferente por cada fichero de propiedades que tengamos, por ejemplo si queremos uno para los mensajes de error y otro para los de información.
/** Fichero con los mensajes de la aplicacion */
private static final ResourceBundle BUNDLE;
/** Indicador del lenguaje a usar */
private static final Locale LOCALE;
Estas variables las iniciamos de forma estática de la siguiente forma:
static {
 final FacesContext context = FacesContext.getCurrentInstance();
 LOCALE = context.getViewRoot().getLocale();
 BUNDLE = context.getApplication().getResourceBundle(context, "msgApp");
}
Dentro de la clase creamos un método estático, que nos devuelva el mensaje formateado (en caso de que le pasemos parámetros ) para mostrar por pantalla.
public static String getMessage(final String key, final Object... args) {
   String retorno = null;
   if (args == null || args.length == 0) {
      retorno =  BUNDLE.getString(key);
   }else{
      MessageFormat fmt = new MessageFormat(BUNDLE.getString(key));
      fmt.setLocale(LOCALE);
      retorno = fmt.format(args).toString();
   }
   return retorno;
}
Ahora mostramos como sería una llamada a este método:
MessagesFactory.getMessage("field.requiered", "name");

No hay comentarios:

Publicar un comentario