我遇到了这个错误:
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 的方法的。这是一个可以直接解决的问题吗?
最佳答案
根据 <f:ajax>
tag documentation execute
属性应该指的是要在服务器端处理的客户端 ID 的集合。这不应该引用某些 bean 操作方法。出现异常是因为它需要一个返回客户端 ID 集合的 getter 方法。
您想使用 listener
属性代替。
<f:ajax listener="#{localeManager.changeLocale}" />
请注意 h:selectOneMenu
的默认事件已经是valueChange
.你可以忽略它。
关于java - JSF 2 - 找不到 Ajax 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5029878/