繁体   English   中英

a4j:commandLink双击后执行操作

[英]a4j:commandLink executes action after double clicking

我有一个带有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>

UPDATE

这是我添加到同一视图的另一段代码,但是现在发生了两件事:

  1. 首次加载View时,如果我单击表上的a4j:commandLink ,该操作将被罚款。
  2. 完成1之后,当我尝试检查(或取消选中) <h:sekectBooleanCheckBox>此组件在单击两次后将执行ajax。
  3. 我尝试了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> 

在使用表更新显示的表单的另一种表单中,请确保在ajax render包括该表单的客户端ID。 否则,更新后的表单将失去其视图状态,因此在第一次提交时将不进行任何处理。 第一次提交表单后,其视图状态将恢复,随后的提交将被成功处理。

例如

<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规范问题790有关,并且在即将发布的JSF 2.2中已解决。 PrimeFaces 3.x不存在此问题,因为其修改后的JSF ajax引擎已将其考虑在内。

也可以看看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM