Jquery 对话框中的Primefaces-CommandButton正在刷新页面
单击对话框中的命令按钮后,将重新加载所有页面,但我不想重新加载所有页面,只加载一个组件。 启动fileUpload事件并从bean打开该对话框时,将显示该对话框:Jquery 对话框中的Primefaces-CommandButton正在刷新页面,jquery,jsf,primefaces,Jquery,Jsf,Primefaces,单击对话框中的命令按钮后,将重新加载所有页面,但我不想重新加载所有页面,只加载一个组件。 启动fileUpload事件并从bean打开该对话框时,将显示该对话框: RequestContext.getCurrentInstance().execute("openCropImageDialog('artistImageCropperDialog',"+this.MAX_SIZE_PX+");"); 这是对话框组件的代码: <composite:implementation>
RequestContext.getCurrentInstance().execute("openCropImageDialog('artistImageCropperDialog',"+this.MAX_SIZE_PX+");");
这是对话框组件的代码:
<composite:implementation>
<h:panelGroup layout="block" styleClass="links">
<h:panelGroup id="imageCropperDialog" layout="block" styleClass="hidden">
<h:form id="imageCropperForm">
<p:imageCropper id="cropperImage" value="#{cc.attrs.croppedImage}"
image="/upload/#{cc.attrs.imageTmp}"
initialCoords="#{cc.attrs.initialCoords}"
aspectRatio="1"
minSize="#{cc.attrs.minSize}"
/>
<h:commandButton id="acceptButton" action="#{cc.attrs.acceptCropAction}" styleClass="hidden">
<f:ajax execute="@form" render="@form :messages :form:pictureHandler:updatableElements" onevent="onAcceptCropEvent"/>
</h:commandButton>
<h:commandButton id="cancelButton" action="#{cc.attrs.cancelCropAction}" styleClass="hidden">
<f:ajax execute="@this" render="@form :messages"/>
</h:commandButton>
</h:form>
</h:panelGroup>
</h:panelGroup>
</composite:implementation>
我已经解决了最初的问题,纠正了javscript代码中的一些错误,并取消了ajax标记的注释。
现在的问题是对话框只在第一次显示,下一次,对话框不会被打开。没有显示任何错误和异常。为什么要注释掉ajax?试试这个
<h:commandButton id="acceptButton" action="#{cc.attrs.acceptCropAction}" styleClass="hidden">
<f:ajax execute="@form" render=":cropperImage" onevent="onAcceptCropEvent"/>
</h:commandButton>
原件 您是否尝试使用属性ajax=false
已编辑 好的,我在这里更改了我的答案,以便可以更清楚地看到,解决方法是简单地避免commandButton呈现任何内容,而允许backingbean执行更新。你可以这样做
<h:commandButton id="acceptButton" action="#{cc.attrs.acceptCropAction}"
styleClass="hidden" value="#{cc.attrs.acceptCropActionLabel}">
<f:ajax execute="@form" render="@none" />
</h:commandButton>
这种方式对我有效,所以我希望对你有效。顺便说一句,你需要包括
import org.primefaces.context.RequestContext;
在支持bean中,它才能工作。希望现在能有所帮助。只需查看您的html错误日志(在chrome中,它在inspect元素中可用),它似乎正在生成任何javascript错误,导致按钮提交整个页面。感谢您的回答,但页面仍在重新加载。我评论了ajax,因为页面正在重新加载,我不知道为什么。由于页面被重新加载,我不想添加ajax操作,因为行为是相同的;通过此更改,“命令”按钮无效。正在重新加载的页面是dialog的容器。嗯,尝试使用commandlink怎么样?而不是commandButton,或将类型更改为button。。。我正在用我的手机回答这个问题,因为我无法进行测试,但我以前做过。。我的回答也是为了跟踪这个问题,看看是否能给你一个更好的答案。好的,试试这个,
actionListener=“#{cc.attrs.acceptCropAction}”
并隐藏关于操作的对话框,继续更新命令上的值,否则就可以了,有必要查看你的acceptCropAction在Backing bean中做了什么。使用actionListener它不起作用。操作的代码在原始问题中有详细说明好的,这是我实现了您的代码并使用了
,然后直接从支持bean更新您想要的组件,它对我有用,希望对您有用。注意:编辑以使代码更易于阅读,非常感谢。我已经解决了这个问题,但是对话框只在第一次显示,下一次,对话框不会显示。除非您在web.xml中有不同的指示,否则在xhtml中注释代码无效,代码仍将被处理。使用
是导致提交整个页面的原因;将其更改为
javax.faces.FACELETS\u SKIP\u COMMENTS true with p:commandButton它不工作重新加载表单的问题是javascript错误。但我发现了fileUpload组件的另一个问题。我要开始一个新问题。谢谢
RequestContext.getCurrentInstance().update("id_of_whatever_you_want");
import org.primefaces.context.RequestContext;