在 faces-config jsf 中调用多个属性,我总是调用资源?
Invoking multiple properties in the faces-config jsf, I always invokes the resource?
我管理两个属性 一个用于通用消息,一个用于属于我系统的每个模块,但我遇到的问题是在调用第一种方法时 getMessage() 总是调用资源的属性,当它应该发送消息时。
public class ResourceBundleUtil implements Serializable {
private static final long serialVersionUID = 1L;
public static final String MESSAGE_PATH = "messages";
public static final String RESOURCE_PATH = "resources";
private static HashMap<String, Object> messageBundles = new HashMap<String, Object>();
public static String getMessage(String key) {
if (key == null) {
return null;
}
try {
Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
if (locale == null) {
locale = Locale.ENGLISH;
}
ResourceBundle messages = (ResourceBundle) messageBundles.get(locale.toString());
if (messages == null) {
messages = ResourceBundle.getBundle(MESSAGE_PATH, locale);
messageBundles.put(locale.toString(), messages);
}
return messages.getString(key);
} catch (Exception e) {
return key;
}
}
public static String getResource(String key) {
if (key == null) {
return null;
}
try {
Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
if (locale == null) {
locale = Locale.ENGLISH;
}
ResourceBundle messages = (ResourceBundle) messageBundles.get(locale.toString());
if (messages == null) {
messages = ResourceBundle.getBundle(RESOURCE_PATH, locale);
messageBundles.put(locale.toString(), messages);
}
return messages.getString(key);
} catch (Exception e) {
return key;
}
}
}
我遇到的问题是 getMessage() 方法总是调用 resource 属性,什么时候应该消息:
if (messages == null) {
messages = ResourceBundle.getBundle(MESSAGE_PATH, locale);
messageBundles.put(locale.toString(), messages);
}
没有进入conditional,注意到comes with name value是resource.
与方法 getResource() 不同,如果我注意到它运行正常。
请我对那个问题发表评论,谢谢。
看起来问题在于您将两种类型的包都存储在单个地图中。所以如果 resources bundle 首先被使用,它被添加到 map 中。键是当前语言环境(例如 "en")。
然后,如果您尝试检索具有相同语言环境的 messages 包,您实际上会得到 resources 包而不是 messages 一个因为你使用相同的密钥。
要解决这个问题,要么使用两个单独的映射,要么像这样在键前加上包标识符:
messageBundles.put("resources_" + locale.toString(), messages);
顺便说一句。您使用标准 Java 捆绑包。有关如何使用 faces-config.xml 中定义的包的更多提示,请参见此处:
How can I get a message bundle string from inside a managed bean?
我管理两个属性 一个用于通用消息,一个用于属于我系统的每个模块,但我遇到的问题是在调用第一种方法时 getMessage() 总是调用资源的属性,当它应该发送消息时。
public class ResourceBundleUtil implements Serializable {
private static final long serialVersionUID = 1L;
public static final String MESSAGE_PATH = "messages";
public static final String RESOURCE_PATH = "resources";
private static HashMap<String, Object> messageBundles = new HashMap<String, Object>();
public static String getMessage(String key) {
if (key == null) {
return null;
}
try {
Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
if (locale == null) {
locale = Locale.ENGLISH;
}
ResourceBundle messages = (ResourceBundle) messageBundles.get(locale.toString());
if (messages == null) {
messages = ResourceBundle.getBundle(MESSAGE_PATH, locale);
messageBundles.put(locale.toString(), messages);
}
return messages.getString(key);
} catch (Exception e) {
return key;
}
}
public static String getResource(String key) {
if (key == null) {
return null;
}
try {
Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
if (locale == null) {
locale = Locale.ENGLISH;
}
ResourceBundle messages = (ResourceBundle) messageBundles.get(locale.toString());
if (messages == null) {
messages = ResourceBundle.getBundle(RESOURCE_PATH, locale);
messageBundles.put(locale.toString(), messages);
}
return messages.getString(key);
} catch (Exception e) {
return key;
}
}
}
我遇到的问题是 getMessage() 方法总是调用 resource 属性,什么时候应该消息:
if (messages == null) {
messages = ResourceBundle.getBundle(MESSAGE_PATH, locale);
messageBundles.put(locale.toString(), messages);
}
没有进入conditional,注意到comes with name value是resource.
与方法 getResource() 不同,如果我注意到它运行正常。
请我对那个问题发表评论,谢谢。
看起来问题在于您将两种类型的包都存储在单个地图中。所以如果 resources bundle 首先被使用,它被添加到 map 中。键是当前语言环境(例如 "en")。
然后,如果您尝试检索具有相同语言环境的 messages 包,您实际上会得到 resources 包而不是 messages 一个因为你使用相同的密钥。
要解决这个问题,要么使用两个单独的映射,要么像这样在键前加上包标识符:
messageBundles.put("resources_" + locale.toString(), messages);
顺便说一句。您使用标准 Java 捆绑包。有关如何使用 faces-config.xml 中定义的包的更多提示,请参见此处: How can I get a message bundle string from inside a managed bean?