Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF2-未找到Ajax属性_Java_Jsf_Jsf 2 - Fatal编程技术网

Java JSF2-未找到Ajax属性

Java JSF2-未找到Ajax属性,java,jsf,jsf-2,Java,Jsf,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 publ

我得到了这个错误:

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

根据
execute
属性应该指的是要在服务器端处理的客户端ID的集合。这不应该引用某些bean操作方法。异常即将出现,因为它需要一个getter方法,该方法返回一组客户端ID

您希望改用
侦听器
属性

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


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

太好了!谢谢有没有办法从h:SelectOne菜单中获取所选值?event.toString()仅返回事件。我在Eclipse中查看了内容帮助,但找不到返回h:selectOneMenu中所选值的方法。只需访问value
{langListing.language}
后面的属性即可。因为它显然位于不同的托管bean上,所以您希望重构其中一个和另一个,例如更改为
{localeManager.language}
,或者将一个注入另一个,例如
@ManagedProperty(value=“#{langListing})private LangListing LangListing;
inside
LocaleManager
。我还没有做过JSF 2注入,但是你的例子很好。我还有一个问题,但我想在我来问问题之前先自己弄清楚。无论如何,谢谢大家。