我收到了这个错误:
execute="#{localeManager.changeLocale}": Property 'changeLocale' not found on type xyz.com.i18n.LocaleManager
LocaleManager是:
@ManagedBean
@ViewScoped
public class LocaleManager implements Serializable
{
// other codes here
public static void changeLocale(AjaxBehaviorEvent event) {
newLocale = (Locale) new Locale((String) event.toString());
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("selectedLocale", newLocale);
}
}
我在这里调用bean的方法:
<h:selectOneMenu id="selectLang" immediate="true" value="#{langListing.language}">
<f:ajax event="change" execute="#{localeManager.changeLocale}" />
<f:selectItems value="#{langListing.languages}" />
</h:selectOneMenu>
我正在通过试验这段代码来学习AJAX。但我不明白Ajax如何评估bean的方法。这是一个直截了当的问题要解决吗?
答案 0 :(得分:1)
根据<f:ajax>
tag documentation,execute
属性应引用要在服务器端处理的客户端ID的集合。这不应该引用一些bean动作方法。异常即将到来,因为它需要一个 getter 方法,该方法返回一组客户端ID。
您想要使用listener
属性。
<f:ajax listener="#{localeManager.changeLocale}" />
请注意h:selectOneMenu
的默认事件已为valueChange
。你可以省略它。