Test für null Parameter in .properties-Datei für Message
-
21-09-2019 - |
Frage
Ist es möglich, mit Ressourcenbündel und Message das folgende Ergebnis zu haben?
- wenn ich
getBundle("message.07", "test")
nennen"Group test"
bekommen
- wenn ich
getBundle("message.07", null)
nennen"No group selected"
bekommen
Jedes Beispiel, das ich im Internet ist mit Planeten, mit Dateien auf der Festplatte und so weiter.
Ich brauche nur zu prüfen, ob ein Parameter null
( oder existiert nicht ) in dem Eigenschaften-Datei des Ressourcenbündels. Ich hoffe, ein spezielles Format für den Null-Parameter so etwas wie {0,choice,null#No group selected|notnull#Group {0}}
zu finden.
Die Methode, die ich verwende, um die Pakete zu bekommen, ist:
public String getBundle(String key, Object... params) {
try {
String message = resourceBundle.getString(key);
if (params.length == 0) {
return message;
} else {
return MessageFormat.format(message, params);
}
} catch (Exception e) {
return "???";
}
}
Ich nenne diese Methode auch für andere Bundles, wie
-
getBundle("message.08", 1, 2)
=>"Page 1 of 2"
(immer Parameter, keine Notwendigkeit fürnull
zu überprüfen) -
getBundle("message.09")
=>"Open file"
(keine Parameter, keine Notwendigkeit fürnull
zu überprüfen)
Was soll ich in meiner .properties-Datei für message.07
schreiben das Ergebnis zu haben, beschrieben?
Was ich jetzt habe, ist:
message.07=Group {0}
message.08=Page {0} of {1} # message with parameters where I always send them
message.09=Open file # message without parameters
Lösung
Ihre .properties
Datei,
message.07=Group {0}
message.08=Page {0} of {1}
message.09=Open file
message.null = No group selected
Und dann müssen Sie Ihren Code ändern, um eine explizite Kontrolle params
für null
zu setzen. Und wenn null
dann können Sie so etwas wie resourceBundle.getString(NULL_MSG)
tun. Wo NULL_MSG
wird dies,
private static final String NULL_MSG = "message.null";
So, jetzt Ihre ursprüngliche Methode so etwas wie diese werden würde.
public String getBundle(String key, Object... params) {
String message = null;
try {
if (params == null) {
message = resourceBundle.getString(NULL_MSG);
} else {
message = MessageFormat.format(resourceBundle.getString(key), params);
}
} catch (Exception e) {
e.printStackTrace();
}
return message;
}
Der Aufruf meine Methode wie unten,
getBundle("message.07", "test") // returning 'Group test'
getBundle("message.07", null) // returning 'No group selected'
getBundle("message.08", 1, 2) // returning 'Page 1 of 2'
getBundle("message.08", null) // returning 'No group selected'
getBundle("message.09", new Object[0]) // returning 'Open file'
getBundle("message.09", null) // returning 'No group selected'
Nun sagen Sie mir, wo ist das Problem?
Andere Tipps
Ich werde empfehlen nicht versucht, das Bündel Funktionalität zu ändern (auch wenn Sie eine getBundle Methode haben sie einkapseln).
Sie einfach im Code tun:
getBundle(param == null? "message.07.null": "message.07", param)
oder ein anderes Verfahren machen:
getBundleOrNull("message.07", param, "message.07.null")
das tut
public String getBundleOrNull(String key, value, nullKey) {
return getBundle(value == null? nullKey: key: value);
}