gpt4 book ai didi

java - primefaces commandbutton ajax 提交作为非 ajax 提交工作

转载 作者:行者123 更新时间:2023-12-01 10:34:22 25 4
gpt4 key购买 nike

我正在使用 primefaces 3.5,我想使用 p:commandButton 和 ajax 更新对象的值,但是当我单击 p:commandButton 时,表单完全作为非 ajax 提交提交。我尝试使用立即= true,ajax =“true”(但我读到此选项是默认选项)partial-submit =“true”但什么也没有,按钮刷新所有页面而不仅仅是asignarUA组件。

注意:这是一个 liferay (6.2 CE) portlet。

这是代码的一部分:

<html xmlns="http://www.w3.org/1999/xhtml"  
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<h:body>
<h:form>
<p:commandButton onclick="asignarUADlg.show()" update=":asignarUA" title="Asignar" value="Asignar">
<f:setPropertyActionListener value="#{solicitud }" target="#{mailboxView.solicitud}"/>
</p:commandButton>
</h:form>


<p:dialog id="asignarUA" widgetVar="asignarUADlg" modal="true" header="Asignar Unidades Administrativas" width="530" showEffect="fade" hideEffect="fade">
<h:form enctype="multipart/form-data">
<h:outputLabel for="dependencia" value="Dependencia: " />
<h:outputText value="#{mailboxView.solicitud.nombreDependencia}" rendered="#{not empty mailboxView.solicitud}" />
<p:separator />

<p:commandButton value="Enviar" ajax="false" actionListener="#{mailboxView.asignar}" update=":messages2"/>
<p:commandButton value="Cancelar" onclick="asignarUADlg.hide()" type="button"/>
</h:form>
</p:dialog>
</h:body>
</html>

最佳答案

您的第一个 p:commandButton 显示对话框,然后立即再次隐藏它。这也会导致页面闪烁,我认为您已将这种闪烁误认为是非 ajax 提交。当您单击 p:commandButton 时,将调用 dialog.show() 并显示对话框。然后 update=":dialogId" 代码运行*并向服务器发送 ajax 请求以重新呈现对话框。由于服务器不知道客户端已调用 dialog.show(),因此服务器认为对话框仍应处于默认状态:隐藏。因此,返回的部分响应会将对话框重置为其初始状态并再次隐藏对话框。

解决方案是更新对话框的内容而不是整个对话框。对于您的特定示例,您应该向第二个 h 添加一个 id :form 并通过您的 Asignar 按钮更新它:

<h:form>
<p:commandButton onclick="asignarUADlg.show()" update=":dialogContent"
title="Asignar" value="Asignar">

<!-- ... -->

<p:dialog id="asignarUA" widgetVar="asignarUADlg" modal="true"
header="Asignar Unidades Administrativas" width="530" showEffect="fade" hideEffect="fade">
<h:form id="dialogContent" enctype="multipart/form-data">

<!-- ... -->

*update 属性使 p:commandButton 呈现代码以在其 onclick 属性中发送 ajax 请求。因此,ajax 代码实际上是在 dialog.show() 之后调用的。

关于java - primefaces commandbutton ajax 提交作为非 ajax 提交工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34866234/

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