Frage

Ich habe eine exsisting Java / JSF Website der gesamte Text auf dem Bildschirm von Eigenschaftsdateien kommt über , die den Text aus applicaltion zieht. Eigenschaften.

Für eine Laufzeit konfigurierbare Teilmenge davon Ich bin zu wollen, um die Zeichenfolge ziehen aus sonst wo (CMS über Web-Service). Mit Blick auf der Resource Klasse appares es eine infrastructer für eine eng, etwas zu diesem mit einer Delegation zu einem übergeordneten Resource.

Ich bin somethis wie diese wollen

public class Applicaltion extends ResourceBundle{
    @Override
protected Object handleGetObject(String key) {
    if(overridenKey(key)){
        return overridedValue(key);
    }
    return null; // ResourceBundle.getObject will delegate to parent 
             // if we return null
}
}

Ich habe versucht, diese und Eltern sind null, ich nehme an, dies für den Fall des Ausfalls mehr verwendet -> en. -> de_DE

Ich betrachte das nicht sehr ansprechend Möglichkeit hat die Eigenschaft, Datei einen anderen Namen aus dem benutzerdefinierten Resource und dann durch den gesamten Stapel von ResourceBundle.getBundle Delegieren (PROPERTY_FILE_NAME) .getString (key) aus CustomResourceBundle.handleGetObject (key) .

Jede bessere Ideen?

War es hilfreich?

Lösung

ich am Ende zu lösen dies, indem geprüft wird, ob wir einen Alternativwert hatten, wenn wir das haben zurückkehren, sonst auf das Standardressourcenpaket zu delegieren

public class UILabels extends ResourceBundle {


private ResourceBundle getFileResources(){
    return ResourceBundle.getBundle("com.example.web.UILabelsFile", this.getLocale());
}

public Enumeration<String> getKeys() {
    return getFileResources().getKeys();
}

protected Object handleGetObject(String key) {
    if(overrideValue(key)){
        return getOverridenValue(key);
    }
    return getFileResources().getObject(key);
}

}

Beachten Sie den kleinen Unterschied in Namensklasse ist UILabels das ist, was alle Clients die Datei zu verwenden ist UILabelsFile so die Resourceloader nicht rekursiv geht.

Andere Tipps

Sie können eine benutzerdefinierte PropertyResolver schreiben, und dann haben, dass die Logik durchführen, wo aus die Eigenschaftswerte zu ziehen.

Zum Beispiel könnten Sie eine Bohne genannt messageSource definieren und dass die Last bis application.properties, plus Ihre CMS Eigenschaften oder was auch immer Sie haben.

Dann schreiben Sie eine benutzerdefinierte PropertyResolver (es gibt ein Beispiel dafür, wie diese Message die mit Frühling zu tun hier ) und es in etwas zu Ihrem faces-config.xml Link:

<application>  
<property-resolver>  
      com.package.MessageSourcePropertyResolver  
   </property-resolver>  
</application>   
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top