2011-02-17 49 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