2011-06-23 6 views
6

W JSF 2.0, jeśli wiadomość nie zostanie znaleziona w pakiecie komunikatów, domyślnie klucz jest otoczony przez ???. Jest to bardzo użyteczna wskazówka podczas programowania. Jednak w moim konkretnym przypadku, naprawdę chciałbym, aby te ??? nie były obecne. Wolę, żeby tylko klucz był renderowany.Jak usunąć otoczenie ??? gdy wiadomość nie zostanie znaleziona w pakiecie

E.g. kiedy robię

#{msg.hello} 

i klucz 'hello' nie istnieje, wówczas strona wyświetla

??? cześć ???

ale chciałbym pokazać goły klucz

Witam

Komunikat wiązka jest załadowany na stronie JSF następująco:

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

Znacznik <f:loadBundle> nie wydaje się mieć atrybutu do manipulowania sposobem pobierania wartości z tego pakietu. Czy powinienem nadpisać jakąś klasę lub jak przechwycić sposób, w jaki wiadomości są pobierane z pakietu?

Znalazłem bardzo interesujący artykuł na ten temat: Context Sensitive Resource Bundle entries in JavaServer Faces applications – going beyond plain language, region & variant locales. Jednak w moim przypadku chcę po prostu pominąć ???. Myślę, że to rozwiązanie jest dość skomplikowane. Jak w ogóle mogę to osiągnąć?

Odpowiedz

7

Może wskazywać na pełną klasę ResourceBundle. Na przykład.

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

z

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); 
    } 

} 

Można overridde wiadomość wiązki Postępowanie handleGetObject. JSF domyślnie (przez spec) dzwoni getObject(), łapie MissingResourceException i zwraca "???" + key + "???" po złapaniu. Możesz zrobić to inaczej.

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

Dziękuję bardzo, twoja odpowiedź jest idealna i działa jak czar. Hartelijk dank! – rose