我有一个用a4j:commandLink
删除相应用户的用户表,但问题是我需要点击两次才能执行该操作,我该如何解决,这是代码:
<h:form id="formUsuariosRegistrados">
<rich:dataScroller for="usersTable" fastControls="hide"
boundaryControls="hide" />
<rich:dataTable id="usersTable" rows="10" var="user"
value="#{administrationBean.tablaUsuarios}">
<f:facet name="header">
<rich:columnGroup>
<rich:column>
<h:outputText value="Nombre"/>
</rich:column>
<rich:column>
<h:outputText value="Usuario"/>
</rich:column>
<rich:column>
<h:outputText value="Dependencia"/>
</rich:column>
<rich:column>
<h:outputText value="Email"/>
</rich:column>
<rich:column>
<h:outputText value="Tipo usuario"/>
</rich:column>
<rich:column>
<h:outputText value="Tipo dependencia"/>
</rich:column>
<rich:column>
<h:outputText value="Fecha límite"/>
</rich:column>
<rich:column>
<h:outputText value=""/>
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column>
<h:outputText value="#{user.nombre}"/>
</rich:column>
<rich:column>
<h:outputText value="#{user.usuario}"/>
</rich:column>
<rich:column>
<h:outputText value="#{user.dependencia}"/>
</rich:column>
<rich:column>
<h:outputText value="#{user.correo}"/>
</rich:column>
<rich:column>
<h:outputText value="#{user.tipoUsuario}"/>
</rich:column>
<rich:column>
<h:outputText value="#{user.tipoDependencia}"/>
</rich:column>
<rich:column>
<h:outputText value="#{user.fechaLimiteCarga}"/>
</rich:column>
<rich:column>
<a4j:commandLink value="Eliminar" immediate="true"
execute="@form"
onclick="return confirm('Esta seguro(a) que deseea continuar?')"
render="@form :formFechaLimite :formModificarContrasena"
action="#{administrationBean.doEliminarUsuario(user.usuario)}"/>
</rich:column>
</rich:dataTable>
</h:form>
更新
这是我添加到同一视图中的另一段代码,但现在发生了两件事:
a4j:commandLink
,则该操作会被称为罚款。<h:sekectBooleanCheckBox>
时,此组件在单击两次后执行ajax。我尝试过BalusC的答案,但我认为我没有采用这种新表格。
请告知,欢呼
<h:form id="formFechaLimite">
<rich:panel style="width: 400px" id="panelFechaLimite">
<f:facet name="header">
<h:outputText value="Fecha limite de carga"/>
</f:facet>
<h:outputLabel for="fechaLimite" value="Fecha Limite"/>
<br/>
<rich:calendar id="fechaLimite"
value="#{administrationBean.fechaLimite}"
datePattern="dd/MM/yyyy">
<a4j:ajax event="change" render="usuarios fechaLimiteModificada"
listener="#{administrationBean.doHideEtiquetaFechaModificada}"/>
</rich:calendar>
<br/>
<h:outputLabel for="todosUsuarios"
value="Aplicar a todos los usuarios? "/>
<h:selectBooleanCheckbox id="todosUsuarios"
value="#{administrationBean.fechaTodosUsuarios}">
<a4j:ajax event="change" render="usuarios fechaLimiteModificada"
listener="#{administrationBean.doCheckBoxChanged}"/>
</h:selectBooleanCheckbox>
<br/>
<a4j:outputPanel id="usuarios">
<rich:select value="#{administrationBean.selectedUser}"
defaultLabel="Seleccione un usuario..."
rendered="#{not administrationBean.fechaTodosUsuarios}">
<f:selectItems value="#{administrationBean.selectUser}"/>
<a4j:ajax event="selectitem" render="fechaLimiteModificada"
listener="#{administrationBean.doHideEtiquetaFechaModificada}"/>
</rich:select>
</a4j:outputPanel>
<br/><br/>
<a4j:commandButton value=" Aplicar " execute="@form"
render="@form :panelUsuarios :formUsuariosRegistrados :usersTable"
action="#{administrationBean.doCambiarFechaLimite}"/>
<a4j:outputPanel id="fechaLimiteModificada">
<h:outputText value="Fecha límite modificada !"
rendered="#{administrationBean.renderedEtiquetaFechaModicada}"
style="color: #D17100; font-size: 14px;"/>
</a4j:outputPanel>
</rich:panel>
<br/>
</h:form>
<br/>
<rich:panel style="width: 800px" id="panelUsuarios">
<f:facet name="header">
<h:outputText value="Administración de usuarios"/>
</f:facet>
<h:form id="formUsuariosRegistrados">
<rich:dataScroller for="usersTable" fastControls="hide"
boundaryControls="hide" />
<rich:dataTable id="usersTable" rows="10" var="user"
value="#{administrationBean.tablaUsuarios}">
<f:facet name="header">
<rich:columnGroup>
<rich:column>
<h:outputText value="Nombre"/>
</rich:column>
<rich:column>
<h:outputText value="Usuario"/>
</rich:column>
<rich:column>
<h:outputText value="Dependencia"/>
</rich:column>
<rich:column>
<h:outputText value="Email"/>
</rich:column>
<rich:column>
<h:outputText value="Tipo usuario"/>
</rich:column>
<rich:column>
<h:outputText value="Tipo dependencia"/>
</rich:column>
<rich:column>
<h:outputText value="Fecha límite"/>
</rich:column>
<rich:column>
<h:outputText value=""/>
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column>
<h:outputText value="#{user.nombre}"/>
</rich:column>
<rich:column>
<h:outputText value="#{user.usuario}"/>
</rich:column>
<rich:column>
<h:outputText value="#{user.dependencia}"/>
</rich:column>
<rich:column>
<h:outputText value="#{user.correo}"/>
</rich:column>
<rich:column>
<h:outputText value="#{user.tipoUsuario}"/>
</rich:column>
<rich:column>
<h:outputText value="#{user.tipoDependencia}"/>
</rich:column>
<rich:column>
<h:outputText value="#{user.fechaLimiteCarga}"/>
</rich:column>
<rich:column>
<a4j:commandLink value="Eliminar" immediate="true"
execute="@form"
ondblclick="return confirm('Esta seguro(a) que deseea continuar?')"
render="@form :formFechaLimite :formModificarContrasena"
action="#{administrationBean.doEliminarUsuario(user.usuario)}"/>
</rich:column>
</rich:dataTable>
</h:form>
<br/>
</rich:panel>
答案 0 :(得分:5)
在您使用表格更新显示的表单的另一种形式中,请确保在ajax render
中包含表单的客户端ID。否则更新的表单将失去其视图状态,因此在第一次提交时不会处理任何内容。在第一次提交后,表单返回其视图状态,后续提交将成功处理。
E.g。
<h:form>
...
<h:commandButton value="Submit" action="#{bean.submit}">
<f:ajax execute="@form" render=":otherPanel :otherForm" />
</h:commandButton>
</h:form>
<h:panelGroup id="otherPanel">
...
<h:form id="otherForm">
...
</h:form>
...
</h:panelGroup>
此问题与JSF spec issue 790有关,并且针对即将推出的JSF 2.2进行了修复。 PrimeFaces 3.x没有这个问题,因为它的修改后的JSF ajax引擎已经考虑到了这一点。