Jquery 对话框中的Primefaces-CommandButton正在刷新页面

Jquery 对话框中的Primefaces-CommandButton正在刷新页面,jquery,jsf,primefaces,Jquery,Jsf,Primefaces,单击对话框中的命令按钮后,将重新加载所有页面,但我不想重新加载所有页面,只加载一个组件。 启动fileUpload事件并从bean打开该对话框时,将显示该对话框: RequestContext.getCurrentInstance().execute("openCropImageDialog('artistImageCropperDialog',"+this.MAX_SIZE_PX+");"); 这是对话框组件的代码: <composite:implementation>

单击对话框中的命令按钮后,将重新加载所有页面,但我不想重新加载所有页面,只加载一个组件。 启动fileUpload事件并从bean打开该对话框时,将显示该对话框:

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;