我也遇到过相同的问题,但是通过多次的试验,总算找到了解决方法,这里简单的说说解决思路,希望能对你有所帮助:
1.如果使用了需要实时更新的变量值,就不要使用ActionListener和ValueChangeListener接口,而是使用这二个Action的方法;也就是说事件处理要跟你的变量在同一个Bean里.这样就不会有不同Bean里传值的问题了.
2.使用Action方法的例子:
<h:commandButton id="group_name_del" value="#{bundle.del_group_label}" actionListener="#{GroupManage.GroupDel}"></h:commandButton>
//---GroupDel是ActionListener方法处理
<h:selectOneListbox id="group_name_list" size="20" value="#{GroupManage.group_name}" onchange="this.form.submit();" valueChangeListener="#{GroupManage.GroupMember}">
<f:selectItems value="#{GroupManage.group_name_list}"/>
</h:selectOneListbox>
//---GroupMember是ValueChangeListener方法处理
3.selectOneListbox组件里要加上onchange="this.form.submit();" 否则就不会重新渲染组件.
4.重新给变量付值时要记得先清除原有变量值.
5.取得组件值的方法:
UIOutput uo = (UIOutput)e.getComponent().findComponent("group_name_list");
String strSql = uo.getValue().toString();
其中group_name_list是组件的ID,就是每个组件的唯名称

解决方案 »

  1.   

    我也遇到过相同的问题,但是通过多次的试验,总算找到了解决方法,这里简单的说说解决思路,希望能对你有所帮助:
    1.如果使用了需要实时更新的变量值,就不要使用ActionListener和ValueChangeListener接口,而是使用这二个Action的方法;也就是说事件处理要跟你的变量在同一个Bean里.这样就不会有不同Bean里传值的问题了.
    2.使用Action方法的例子:
    <h:commandButton id="group_name_del" value="#{bundle.del_group_label}" actionListener="#{GroupManage.GroupDel}"></h:commandButton>
    //---GroupDel是ActionListener方法处理
    <h:selectOneListbox id="group_name_list" size="20" value="#{GroupManage.group_name}" onchange="this.form.submit();" valueChangeListener="#{GroupManage.GroupMember}">
    <f:selectItems value="#{GroupManage.group_name_list}"/>
    </h:selectOneListbox>
    //---GroupMember是ValueChangeListener方法处理
    3.selectOneListbox组件里要加上onchange="this.form.submit();" 否则就不会重新渲染组件.
    4.重新给变量付值时要记得先清除原有变量值.
    5.取得组件值的方法:
    UIOutput uo = (UIOutput)e.getComponent().findComponent("group_name_list");
    String strSql = uo.getValue().toString();
    其中group_name_list是组件的ID,就是每个组件的唯名称