Jsf 2 JSF2.0和selectManyListbox中的生命周期问题
我试图使一个简单的管理页面管理用户列表。jsf代码如下所示: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}" />
<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);
// ...
}