没有ajax的命令按钮在第二次点击

时间:2017-01-09 11:34:30

标签: jsf primefaces commandbutton postconstruct

我有一个带有几个按钮的页面,其中一个用于生成和下载(显示下载弹出窗口)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。

0 个答案:

没有答案