I would like to be able to retrieve a string from a message bundle from inside a JSF 2 managed bean. This would be done in situations where the string is used as the summary
There are two ways to get String resource bundle in managed bean, using baseName
or varName
(see definition of each one below):
varName
: is the String representing the <var></var>
in <resource-bundle>
FacesContext context = FacesContext.getCurrentInstance();
Application app = context.getApplication();
ResourceBundle bundle = app.getResourceBundle(context, varName);
String msg = bundle.getString("key");
baseName
: The fully qualified name of the resource bundle (<base-name>
in <resource-bundle>
).
FacesContext context = FacesContext.getCurrentInstance();
Locale locale = context .getViewRoot().getLocale();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
ResourceBundle bundle = ResourceBundle.getBundle(baseName, locale, loader);
String msg = bundle.getString("key");
You can get the full qualified bundle name of <message-bundle>
by Application#getMessageBundle(). You can get the current locale by UIViewRoot#getLocale(). You can get a ResourceBundle
out of a full qualified bundle
name and the locale by ResourceBundle#getBundle().
So, summarized:
FacesContext facesContext = FacesContext.getCurrentInstance();
String messageBundleName = facesContext.getApplication().getMessageBundle();
Locale locale = facesContext.getViewRoot().getLocale();
ResourceBundle bundle = ResourceBundle.getBundle(messageBundleName, locale);
// ...
Update: as per the mistake in the question, you actually want to get the bundle which is identified by the <base-name>
of <resource-bundle>
. This is unfortunately not directly available by a standard JSF API. You've either to hardcode the same base name in the code and substitute the messageBundleName
in the above example with it, or to inject it as a managed property on <var>
in a request scoped bean:
@ManagedProperty("#{msg}")
private ResourceBundle bundle; // +setter
FacesContext context = FacesContext.getCurrentInstance();
ResourceBundle bundle = context.getApplication().getResourceBundle(context, "msg");
String message = bundle.getString("key");
here is key is property name which you want to access from properties file .
message = This is "message"
This entry is from messages.properites file. and "message" is "key" .