The selectOneMenu tag is given a valueChangeListener attribute that specifies a bean method to invoke when the menu's state changes:
<h:selectOneMenu value="#{form.country}" onchange="submit()"
valueChangeListener="#{form.countryChanged}">
<f:selectItems value="#{form.countryNames}"/>
</h:selectOneMenu>
Note that the JSF life cycle is not invoked by a form submission brought on by a button click.
Instead, the Javascript submit function causes the submission and eventually the countryChanged bean method is called:
private static String US = "United States";
...
public void countryChanged(ValueChangeEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
if (US.equals((String) event.getNewValue()))
context.getViewRoot().setLocale(Locale.US);
else
context.getViewRoot().setLocale(Locale.CANADA);
}
}