2011-06-23 14 views
6

En JSF 2.0, si no se encuentra un mensaje en el paquete de mensajes, de manera predeterminada, la clave está rodeada con ???. Esta es una pista muy útil durante el desarrollo. Sin embargo, en mi caso particular, realmente me gustaría que esos ??? no estuvieran presentes. Prefiero que solo la clave sea renderizada.¿Cómo eliminar los alrededores? cuando no se encuentra el mensaje en el paquete

E.g. cuando lo haga

#{msg.hello} 

y la tecla 'hola' no existe, a continuación, se muestra la página

??? hola ???

pero me gustaría mostrar al desnudo clave

hola

El grupo de mensajes se carga en una página JSF de la siguiente manera:

<f:loadBundle basename="resources.text" var="msg" /> 

La etiqueta <f:loadBundle> no parece tener un atributo para manipular la forma en que se recuperan los valores de ese paquete. ¿Debo sobrescribir alguna clase o cómo interceptar la forma en que se recuperan los mensajes del paquete?

He encontrado un artículo muy interesante sobre esto: Context Sensitive Resource Bundle entries in JavaServer Faces applications – going beyond plain language, region & variant locales. Sin embargo, en mi caso, solo quiero omitir el ???. Creo que esta solución es bastante complicada. ¿Cómo puedo lograrlo de todos modos?

Respuesta

7

El basename puede apuntar a una clase completa de ResourceBundle. P.ej.

<f:loadBundle basename="resources.Text" var="msg" /> 

con

package resources; 

public class Text extends ResourceBundle { 

    public Text() { 
     setParent(getBundle("resources.text", FacesContext.getCurrentInstance().getViewRoot().getLocale())); 
    } 

    @Override 
    public Enumeration<String> getKeys() { 
     return parent.getKeys(); 
    } 

    @Override 
    protected Object handleGetObject(String key) { 
     return parent.getObject(key); 
    } 

} 

Usted puede overridde la manipulación en handleGetObject mensaje de paquete. JSF por defecto (por especificación) llama al getObject(), captura MissingResourceException y devuelve "???" + key + "???" cuando se detecta. Puedes hacerlo de manera diferente.

@Override 
protected Object handleGetObject(String key) { 
    try { 
     return parent.getObject(key); 
    } catch (MissingResourceException e) { 
     return key; 
    } 
} 
+1

muchas gracias, su respuesta es perfecta y funciona como un encanto. Hartelijk dank! – rose

Cuestiones relacionadas