Jsf 2 JSF2.0和selectManyListbox中的生命周期问题

Jsf 2 JSF2.0和selectManyListbox中的生命周期问题,jsf-2,lifecycle,selectmanylistbox,Jsf 2,Lifecycle,Selectmanylistbox,我试图使一个简单的管理页面管理用户列表。jsf代码如下所示: <h:selectOneMenu id="selectUser" value="#{adminBean.user_id}" valueChangeListener="#{adminBean.userSelected}" > <f:selectItems value="#{adminBean.myModelUsersValues}" />

我试图使一个简单的管理页面管理用户列表。jsf代码如下所示:

 <h:selectOneMenu  id="selectUser" value="#{adminBean.user_id}" valueChangeListener="#{adminBean.userSelected}" >
                    <f:selectItems value="#{adminBean.myModelUsersValues}" />   
                    <a4j:ajax event="valueChange" render="login password privilege_list" execute="@this"/>      
                 </h:selectOneMenu > 

   <table>
      <tr>
        <td><h:outputLabel styleClass="LabelStyle" value="login: "/></td>         
      </tr>
      <tr>
        <td>
            <h:inputText id="login" value="#{adminBean.login}"/>
        </td>   
        <td>
        <h:message for="login" style="color:red"/>
        </td>                        
      </tr>
      <tr>
        <td><h:outputLabel styleClass="LabelStyle" value="password: "/></td>         
      </tr>
      <tr>
        <td>
            <h:inputText id="password" value="#{adminBean.password}"/>
        </td>   
        <td>
        <h:message for="password" style="color:red"/>
        </td>                      
      </tr>       
      <tr>
        <td><h:outputLabel styleClass="LabelStyle" value="privilege list: "/></td>         
      </tr>
      <tr>
        <td>
            <h:selectManyListbox  id="privilege_list" value="#{adminBean.privilegeList}">
                <f:selectItems value="#{adminBean.privilegeValues}" />                          
             </h:selectManyListbox > 
        </td>    
        <td>
        <h:message for="privilege_list" style="color:red"/>
        </td>                      
      </tr>
    </table>
    <br/>
    <h:commandButton id="addButton" value="Add" action="#{adminBean.addUser}" styleClass="ButtonStyle"/>               
    <h:commandButton id="deleteButton" value="Delete" action="#{adminBean.deleteUser}" styleClass="ButtonStyle"/>                  
    <h:commandButton id="clearButton" value="Clear" action="#{adminBean.clear}" styleClass="ButtonStyle"/>  
有趣的是,我在清除方法中添加了immediate=“true”,然后发生了相反的事情-列表是可以的,但输入文本已填充

一些事实:

  • valueChangeListener
    时运行!oldValue.equals(newValue)
  • valueChangeListener
    不是客户端事件侦听器。它完全是服务器端的
  • valueChangeListener
    完全独立于ajax请求还是普通请求。它在所有类型的请求上都被调用,包括普通表单submit
  • 您需要

    <h:selectOneMenu  id="selectUser" value="#{adminBean.user_id}">
        <f:selectItems value="#{adminBean.myModelUsersValues}" />   
        <a4j:ajax event="valueChange" listener="#{adminBean.userSelected}" render="login password privilege_list" execute="@this"/>      
    </h:selectOneMenu > 
    
    一些事实:

  • valueChangeListener
    时运行!oldValue.equals(newValue)
  • valueChangeListener
    不是客户端事件侦听器。它完全是服务器端的
  • valueChangeListener
    完全独立于ajax请求还是普通请求。它在所有类型的请求上都被调用,包括普通表单submit
  • 您需要

    <h:selectOneMenu  id="selectUser" value="#{adminBean.user_id}">
        <f:selectItems value="#{adminBean.myModelUsersValues}" />   
        <a4j:ajax event="valueChange" listener="#{adminBean.userSelected}" render="login password privilege_list" execute="@this"/>      
    </h:selectOneMenu > 
    

    希望我仍然可以指望一些帮助,因为它是关于同一个项目。你的建议行得通,但我还有一个问题。当我添加用户时,一切正常,我可以在SelectOneMenu中看到新用户。但是,当我删除它时,它仍然在列表中(尽管选中时没有填充任何字段)。当然,我更新bean方法中的列表与添加用户操作中的列表完全相同。有什么问题吗?我试着切换到a4j:ajax的按钮,但它是一样的(加上消息不发送)。希望我仍然可以指望一些帮助,因为它是关于同一个项目。你的建议行得通,但我还有一个问题。当我添加用户时,一切正常,我可以在SelectOneMenu中看到新用户。但是,当我删除它时,它仍然在列表中(尽管选中时没有填充任何字段)。当然,我更新bean方法中的列表与添加用户操作中的列表完全相同。有什么问题吗?我尝试切换到a4j:ajax的按钮,但它是相同的(加上消息不发送)。
    public void userSelected(AjaxBehaviorEvent event){
        User user = usersValuesBackendMap.get(user_id);
        // ...
    }