我有一个带有几个按钮的页面,其中一个用于生成和下载(显示下载弹出窗口)excel样式表。 Ajax在ajax=false
上设置为<p:commandButton>
,因为启用了ajax后,下载窗口未显示。
按钮验证用户是否已完成所有能够下载excel的操作,如果没有,则会更新消息区域,显示错误弹出消息通过primeface <p:growl>
。
我的问题是第二次点击按钮。首次单击后,如果验证方法解析为false,则显示错误消息没有任何问题,但在第二次单击后,根本没有调用该方法,并且调用了@PostConstruct
initialize方法,因此整个页面重新加载清除所有用户输入。
这是.xhtml
个文件代码:
<p:commandButton styleClass="aqua-button btn-style"
actionListener="#{symulujHarmonogramSplat.downloadSchedule}"
update="messages" ajax="false"
value='#{activePreferencesBean.portletResourcesProvider["view.label.button.downloadSchedule"]}'></p:commandButton>
这是支持bean的代码:
@ManagedBean(name = "symulujHarmonogramSplat")
@ExpireWithPageFlow
@SessionScoped
public class SymulujHarmonogramSplat {
/**
* Action button handler - DownloadSchedule
*/
public void downloadSchedule() {
log.info(getClass().getName() + ": downloadSchedule() invoked !");
if (screenLogic.isAllowToDownloadSchedule()) {
xlsManager.downloadSchedule(applicationData,
loanData.getCalculateFinancialDetailsData().getInstallmentList(),
loanData.getCalculateFinancialDetailsData());
}
}
}
bean的方法downloadSchedule()
调用另一个bean的方法screenLogic.isAllowToDownloadSchedule()
这是第二个bean的代码:
@SessionScoped
@ExpireWithPageFlow
@ManagedBean(name = "symulujHarmonogramSplatLogic")
public class SymulujHarmonogramSplatLogic {
public boolean isAllowToDownloadSchedule() {
if (!isSimCompleted) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "Nie wykonano symulacji.", ""));
return false;
} else {
return true;
}
}
}
第二个bean检查用户是否完成了所需的操作并返回true或相应地显示错误消息
我的问题是我可以做些什么来阻止页面在第二次单击后初始化自己(因此强制为每个后续调用调用actionListener
方法)。
编辑1:支持bean的方法是否实际执行任何操作(显示该事件的消息)并不重要。如果在第一次点击后页面重新加载我第二次点击它总是调用PostConstruct init。