【问题标题】:JSF 2 - Ajax Property not foundJSF 2 - 未找到 Ajax 属性
【发布时间】:2011-02-17 13:59:35
【问题描述】:

我收到了这个错误:

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 的方法。这是一个很容易解决的问题吗?

【问题讨论】:

    标签: java jsf jsf-2


    【解决方案1】:

    根据&lt;f:ajax&gt; tag documentationexecute 属性应该指的是要在服务器端处理的客户端 ID 的集合。这不应该引用某些 bean 操作方法。异常即将到来,因为它需要一个返回客户端 ID 集合的 getter 方法。

    您想改用listener 属性。

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

    注意h:selectOneMenu 的默认事件已经是valueChange。你可以省略它。

    【讨论】:

    • 太棒了!谢谢。有没有办法从 h:selectOneMenu 获取选定的值? event.toString() 只返回事件。我查看了 Eclipse 中的内容辅助,但找不到返回在 h:selectOneMenu 中选择的值的方法。
    • 只需访问值 #{langListing.language} 后面的属性。由于它显然在不同的托管 bean 上,因此您想重构一个和另一个,例如更改为#{localeManager.language} 或在其他中注入一个,例如@ManagedProperty(value="#{langListing}) private LangListing langListing;LocaleManager.
    • 我还没有完成 JSF 2 注入,但您的示例效果很好。我还有一个问题,但我想在我来这里提问之前先自己弄清楚。无论如何,谢谢堆和欢呼。
    猜你喜欢
    • 2013-10-13
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2015-10-14
    • 2016-10-09
    • 1970-01-01
    相关资源
    最近更新 更多