I have this bean:
@ManagedBean(name="langListing")
@ViewScoped
public class LangListing implements Serializable
{
private List<SelectItem> languages = new ArrayList<SelectItem>();
private String language;
public LangListing() {
createLangs(); // lazy loading
}
public void createLangs()
{
languages.add(new SelectItem("en", FacesUtil.getResourceBundle().getString("LANG_LABEL_01"))); // English
languages.add(new SelectItem("fr", FacesUtil.getResourceBundle().getString("LANG_LABEL_02"))); // French
}
public List<SelectItem> getLanguages() {
return languages;
}
public String getLanguage()
{
if (FacesContext.getCurrentInstance().getViewRoot().getLocale() != null) {
language = FacesContext.getCurrentInstance().getViewRoot().getLocale().toString();
} else {
language = "en";
}
return language;
}
public void setLanguages(List<SelectItem> languages) {
this.languages = languages;
}
public void setLanguage(String language) {
this.language = language;
}
public void changeLocale(AjaxBehaviorEvent event) {
FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(getLanguage()));
}
}
I'm calling the bean methods from:
<h:selectOneMenu id="selectLang" immediate="true" value="#{langListing.language}">
<f:ajax listener="#{langListing.changeLocale}" render="@form" />
<f:selectItems value="#{langListing.languages}" />
</h:selectOneMenu>
The problem is I can't get the codes to change locale from English to French. Can anyone see the problem? Please help.