2011-06-23 40 views
6

paketinde bulunamadığı zaman JSF 2.0'de, ileti paketinde bir ileti bulunmazsa, varsayılan olarak anahtar ??? ile çevrelenmiştir. Bu gelişme sırasında çok kullanışlı bir ipucu. Ancak, özel durumumda, ???'un mevcut olmadığını gerçekten istiyorum. Ben sadece anahtarın işlenmesini tercih ederim.Çevreleyenler nasıl kaldırılır ??? ileti

E.g. Ben

#{msg.hello} 

ve anahtar ne zaman 'merhaba' yok, o zaman sayfası görüntülenir

??? merhaba ???

ama çıplak anahtar

Hello

aşağıdaki gibi mesaj demeti bir JSF sayfasında yüklendiği göstermek istiyorum:

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

<f:loadBundle> etiketi Değerlerin bu paketten alınma şeklini değiştirmek için bir niteliği yok gibi görünüyor. Bir sınıfa yazmalı mıyım yoksa mesajların paketten alınma biçimini nasıl engellemeliyim?

Bu konuda çok ilginç bir yazı buldum: Context Sensitive Resource Bundle entries in JavaServer Faces applications – going beyond plain language, region & variant locales. Ancak, benim durumumda, sadece ???'u atlamak istiyorum. Bu çözümün oldukça karmaşık olduğunu düşünüyorum. Bunu nasıl başarabilirim?

cevap

7

basenameResourceBundle sınıfının tam değerini işaret edebilir. Örneğin.

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

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

} 

ile Sen handleGetObject işleme bohça mesaj overridde edebilirsiniz. JSF, varsayılan olarak (özelliklerle) getObject()'u çağırır, MissingResourceException'u yakalar ve yakalandığında "???" + key + "???" döndürür. Bunu farklı yapabilirsin.

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

Çok teşekkür ederim, cevabınız mükemmel ve çekicilik gibi çalışıyor. Hartelijk dank! – rose