Jsf 2 h:selectManyListBox值ChangeListener未调用

Jsf 2 h:selectManyListBox值ChangeListener未调用,jsf-2,Jsf 2,我正在使用Netbeans 6.9.1。我使用的代码只是使用selectManyListBox,我希望当用户选择所有值时,我的valueChangeListener被调用。这就是我要做的 <h:selectManyListbox id="countryListBox" size="5" value="#{news.saarcCountries}" onselect="form.submit();" valueChangeListener="#{ne

我正在使用Netbeans 6.9.1。我使用的代码只是使用selectManyListBox,我希望当用户选择所有值时,我的valueChangeListener被调用。这就是我要做的

<h:selectManyListbox id="countryListBox" size="5" value="#{news.saarcCountries}"
                     onselect="form.submit();" valueChangeListener="#{news.changeAppearOnCountryPage}">
    <f:selectItems value="#{news.saarcCountriesMap}"/>
    <f:ajax render="countryPageExpiryCalender" />

</h:selectManyListbox>

<p:calendar id="countryPageExpiryCalender" value="#{news.countryPageExpiryDate}"
            navigator="true" style="z-index: 1;" locale="en" mode="popup"
            pattern="dd/MM/yyyy" showOn="button" readOnlyInputText="true"
            disabled="#{!news.appearOnCountryPage}" />
这是我的价值观

@ManagedBean(name = "news")
@ViewScoped
public class News {

    private Map<String, String> saarcCountriesMap = new LinkedHashMap<String, String>();
    private Set<String> saarcCountries = new TreeSet<String>();
    ...

    public void changeAppearOnCountryPage(ValueChangeEvent vcEvent){
        Iterator iter = saarcCountries.iterator();
        while(iter.hasNext()) {

            String name = (String)iter.next();
            System.out.println(name);
        }
    } //end of changeAppearOnCountryPage


} //end of class News
@ManagedBean(name=“news”)
@视域
公共类新闻{
private-Map saarcCountriesMap=new-LinkedHashMap();
私有集saarcCountries=新树集();
...
公共作废ChangeApparonCountryPage(ValueChangeEvent vcEvent){
迭代器iter=saarcCountries.Iterator();
while(iter.hasNext()){
字符串名称=(字符串)iter.next();
System.out.println(名称);
}
}//ChangeApparonCountryPage结束
}//下课新闻
我希望当用户从SelectManyList框中选择所有值时,我的valueChangeListener被调用,我检查是否在saarcCountries变量中有值,然后我设置ApparonCountryPage=true,这样我的日历就被渲染了。但是我的valueChangeListener没有打电话。我做错了什么

如果我选择onselect,那么我想问一件事,在我选择了所有值之后,每当我选择值时,这个事件都会触发。我希望当用户选择所有值时,调用我的ValueChangeListener,并且用户选择的值将在我的saarcCountries变量中。所以我可以检查用户选择的值

我认为onchange()不适合我的情况。请帮忙。我被它困住了:(

谢谢

像这样试试:

<h:selectManyListbox id="countryListBox" size="5" value="#{news.saarcCountries}">
    <f:selectItems value="#{news.saarcCountriesMap}"/>
    <f:ajax event="change" listener="#{news.changeAppearOnCountryPage}" render="countryPageExpiryCalender"/>
</h:selectManyListbox>

您不需要表单.submit();因为您可以使用ajax

<h:selectManyListbox id="countryListBox" size="5" value="#{news.saarcCountries}">
    <f:selectItems value="#{news.saarcCountriesMap}"/>
    <f:ajax event="change" listener="#{news.changeAppearOnCountryPage}" render="countryPageExpiryCalender"/>
</h:selectManyListbox>