gpt4 book ai didi

java - a4j :commandLink executes action after double clicking

转载 作者:行者123 更新时间:2023-11-30 06:30:09 25 4
gpt4 key购买 nike

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

更新

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

  1. 首次加载 View 时,如果我单击 a4j:commandLink在 table 上, Action 被称为正常。

  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。否则,更新后的表单将丢失其 View 状态,因此在第一次提交时不会处理任何内容。第一次提交后,表单恢复其 View 状态,后续提交将被成功处理。

例如

<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 引擎已经考虑到了这个问题。

另见:

关于java - a4j :commandLink executes action after double clicking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10807640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com