2011-02-17 51 views
2

我得到这个错误:JSF 2 - 阿贾克斯找不到属性

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的方法。这是一个直接的问题要解决吗?

回答

1

根据<f:ajax> tag documentationexecute属性应该指的是要在服务器端处理的客户端ID的集合。这不应该引用一些bean操作方法。例外是因为它期望返回一组客户ID的getter方法。

您想改为使用listener属性。

<f:ajax listener="#{localeManager.changeLocale}" /> 

注意,对于h:selectOneMenu默认事件已经valueChange。你可以忽略它。

+0

太棒了!谢谢。有没有办法从h:selectOneMenu获取选定的值? event.toString()只返回事件。我查看了Eclipse中的内容帮助,但无法找到返回h:selectOneMenu中所选值的方法。 – ChuongPham 2011-02-17 14:37:10