Java a4j:commandLink在双击后执行操作

Java a4j:commandLink在双击后执行操作,java,ajax,jsf,richfaces,Java,Ajax,Jsf,Richfaces,我有一个带有a4j:commandLink的用户表,该表删除了相应的用户,但问题是我需要单击两次才能执行操作,我如何解决它,下面是代码: <h:form id="formUsuariosRegistrados"> <rich:dataScroller for="usersTable" fastControls="hide"

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

在用表更新所示表单的另一个表单中,确保在ajax
render
中包含表单的客户端ID。否则,更新后的表单将丢失其视图状态,因此在第一次提交时不会处理任何内容。第一次提交后,表单将返回其视图状态,后续提交将成功处理

例如


...
...
...
...
这个问题与即将发布的JSF2.2相关,并且已经修复。PrimeFaces 3.x没有这个问题,因为它经过修改的JSF ajax引擎已经考虑到了这一点

另见:

该表单或其父表单是否已事先通过另一表单的ajax请求重新呈现/更新?是的,我有另一个注册用户的表单,每次注册新用户时,此表都会刷新。我的方法是一种不好的做法吗?或者如何避免双击?我读了一些关于JSF2.1上的一个bug的文章,可能是那个bug吗?更新我的问题。我错过了一些东西。。。我放了家长ID,但仍然没有得到我想要的行为,我很沮丧!有没有一种方法可以查看某个视图的状态,或者可以帮助我立即检测
render
属性中缺少的ID?这是另一个问题。复选框(和单选按钮)始终仅在第二次单击时更改。第一次单击时,无法进行更改。您需要用
event=“click”
替换
event=“change”
中的
。它已默认为正确的事件。以后请问一个新问题,不要重复使用旧问题。谢谢@BalusC,我会检查的。我认为这和同一个问题有关,所以我在上面发了帖子。我会记住的。谢谢谢谢@BalusC一直以来的大力帮助。顺便说一句,祝OmniFaces好运!
    <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>