【发布时间】:2013-08-30 08:38:26
【问题描述】:
我有一个enum,其中包含一些selectOneMenu 的条目,这意味着枚举结构如下所示:display, pdfLabel。
我想从我的message bundle 中加载条目标签,这意味着取决于 语言环境。
它工作正常,但只是在我解散项目后的第一次。这意味着,如果我第一次加载条目时语言环境是“en”,即使在注销后 - 会话无效;如果我将语言环境更改为“de”,则条目仍然来自“en” - 消息。仅当我重新部署时才有效。
有人知道这种行为吗?
我的枚举:
public enum Transportmittel {
TRUCK(I18n.get("tv.moc.truck"), "TRUCK"),
AIRFREIGHT(I18n.get("tv.moc.airfreight"), "AIRFREIGHT"),
TRAIN(I18n.get("tv.moc.train"), "TRAIN"),
SEAFREIGHT(I18n.get("tv.moc.seafreight"), "SEAFREIGHT"),
BARGE(I18n.get("tv.moc.barge"), "BARGE");
String ausgabe;
String pdfLabel;
private Transportmittel(String ausgabe, String pdfLabel) {
this.ausgabe = ausgabe;
this.pdfLabel = pdfLabel;
}
public String toString() {
return ausgabe;
}
public String getLabelForPdf() {
return pdfLabel;
}
}
我加载条目的控制器:
@PostConstruct
public void init() {
transportMittelSelectList.add(new SelectItem(Transportmittel.TRUCK.pdfLabel, Transportmittel.TRUCK.ausgabe));
transportMittelSelectList.add(new SelectItem(Transportmittel.TRAIN.pdfLabel, Transportmittel.TRAIN.ausgabe));
transportMittelSelectList.add(new SelectItem(Transportmittel.AIRFREIGHT.pdfLabel, Transportmittel.AIRFREIGHT.ausgabe));
transportMittelSelectList.add(new SelectItem(Transportmittel.SEAFREIGHT.pdfLabel, Transportmittel.SEAFREIGHT.ausgabe));
transportMittelSelectList.add(new SelectItem(Transportmittel.BARGE.pdfLabel, Transportmittel.BARGE.ausgabe));
}
这是我加载消息包的地方:
public class I18n {
public static String get(String msg) {
FacesContext context = FacesContext.getCurrentInstance();
ResourceBundle bundle = context.getApplication().getResourceBundle(
context, "messages");
return bundle.getString(msg);
}
}
【问题讨论】:
-
你能告诉我们 i18n 的 xml 配置吗?以及您如何准确地切换语言环境。
-
@noone 我可以添加它,但我很确定这与我的问题无关,因为消息包中的所有其他值都会相应地加载。正如下面的答案所解释的,我认为它必须与枚举做更多的事情。无论如何感谢您的帮助:)
标签: java jsf web-applications enums