我遇到了取消Ajax请求的问题。我们的应用程序界面是在RF中构建的。
在进度条模式上应该有取消按钮 - 中断当前操作, 例如,从数据库取消填充控件。如何制作?
我尝试使用重新加载页面,带有“if”条件的标记用于控件的getter,还使用“bypassUpdates”,没有任何正面效果。
提前感谢您的帮助
XHTML(按钮):
<a4j:commandButton id="showData"
value="View" styleClass="hBtn"
disabled="#{events.isButtonsDisabled}"
oncomplete="if (#{facesContext.maximumSeverity==null})
{window.open('/seed/pages/data.jsf','DATA')};"
actionListener="#{events.actionShow}"/>
JAVA :(按钮):
public void actionShow(ActionEvent evt) {
//Some logic, getting data from database
}
XHTML(主页 - 显示等待弹出窗口)
<a4j:form>
<a4j:status id="ajaxStat"
onstart="Richfaces.showModalPanel('waitPanel');"
onstop="#{rich:component('waitPanel')}.hide()" />
</a4j:form>
XHTML(Popup):
<rich:modalPanel id="waitPanel" autosized="true" moveable="false"
minWidth="250" styleClass="popup">
<f:facet name="header">
<h:panelGroup>
<h:outputText value="Operation in progress"></h:outputText>
</h:panelGroup>
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="../images/icons/action_close.gif" styleClass="hidelink" id="hidelink"/>
<rich:componentControl for="waitPanel" attachTo="hidelink" operation="hide" event="onclick"/>
</h:panelGroup>
</f:facet>
<a4j:form id="msgFrm" ajaxSubmit="true">
<h:outputText value="Please wait..."/>
<h:graphicImage styleClass="progressBar" value="../images/indicatorbar.gif"/>
<a4j:commandButton value="Cancel" type="button"
onclick="#{rich:component('waitPanel')}.hide()"
action="#{main.cancelAction}"
bypassUpdates="true"/>
</a4j:form>
</rich:modalPanel>
JAVA(Popup):
public void cancelAction(){
//there was setter for true/false flag for actionShow() here, now there is nothing here (it was not working)
}
答案 0 :(得分:1)
重新加载页面会停止所有当前的ajax请求。它不会阻止java后台bean完成请求,但我认为这不是问题。 c:if和ajax渲染不能很好地混合。可能你可以使用'rendered'来禁用更新控件?然后将控件分成两部分。一个显示有效数据,例如亮蓝色。另一个是没有任何数据渲染的,并且有灰色图片。
但是......我不确定我是否正确理解了这个问题。
编辑23-1-2012:看到代码我会说cancelAction必须设置一个标志,然后完成在actionShow()内运行的动作。然后ajax请求完成,弹出窗口关闭。无法理解为什么这不起作用。