【发布时间】:2012-05-29 22:30:58
【问题描述】:
我有一个带有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,动作就会被调用。 -
在执行 1 之后,当我尝试选中(或取消选中)
<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>
【问题讨论】:
-
表单或其父表单是否已被另一个表单的 ajax 请求重新渲染/更新?
-
是的,我有另一个注册用户的表单,每次注册新用户时都会刷新此表。我的做法是不好的做法吗?或者我怎样才能避免双击?我读过一些关于 JSF 2.1 上的错误的信息,可能是那个错误吗?
-
更新我的问题。我遗漏了一些东西......我输入了父 ID,但仍然没有得到我想要的行为,我非常沮丧!有没有办法查看某些 View 的状态如何,或者可以立即帮助我检测我在
render属性上缺少的 ID? -
这是一个不同的问题。复选框(和单选按钮)始终仅在第二次单击时更改。在第一次单击时,没有任何改变的方法。您需要将
<h:selectBooleanCheckbox>中的event="change"替换为event="click"或完全删除它。它已经默认为正确的事件。以后请提出新问题,而不是重复使用旧问题。 -
谢谢@BalusC 我会检查的。我认为它与相同的问题有关,所以我发布了这个。我会记住这一点。谢谢!