PrimeFaces AJAX-commandButton根据其进程属性

时间:2017-07-19 20:49:16

标签: jquery ajax jsf primefaces

我正在使用看起来像这样的按钮:

<p:commandButton
    partialSubmit="true"
    process="@(.ui-selection-column)"
    update="mainForm"
    action="#{requestBean.arise()}"
    title="@(.ui-selection-column) / mainForm"
    value="arise"/>

如果它们位于包含流程选择器(上一个代码段中的ui-selection-column)中指定的类的元素的页面上,则该请求是非AJAX请求;否则它是一个AJAX请求,正如预期的那样

我尝试了几个使用不同类的页面,我得到了相同的结果。所以我不认为问题与特定页面和/或类有关。特别是,我尝试将按钮添加到带有dataTable的页面,其中定义了一个选择列(此列中的复选框具有ui-selection-column类)。然后我用RESTORE_VIEW阶段监听器监视每个请求,并确定请求是否是在其beforePhase方法中调用facesContext.getPartialViewContext()。isAjaxRequest()的AJAX请求。

我的听众看起来像这样:

public class RestoreViewListener implements PhaseListener {
    private static final Logger logger = Logger.getLogger(RestoreViewListener.class);
    @Override
    public PhaseId getPhaseId() {
        return PhaseId.RESTORE_VIEW;
    }
    @Override
    public void beforePhase(PhaseEvent event) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        if (facesContext.getRenderResponse()) {
        } else {
            boolean ajaxRequest = facesContext.getPartialViewContext().isAjaxRequest();
            HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
            DispatcherType dispatcherType = request.getDispatcherType();
            String requestURI = request.getRequestURI();
            logger.info((ajaxRequest ? "AJAX-" : "non-AJAX-") + dispatcherType + requestURI);
        }
    }
    @Override
    public void afterPhase(PhaseEvent event) {
    }
}

faces-config.xml中的侦听器定义如下所示:

<lifecycle>
    <phase-listener>
        web.app.RestoreViewListener
    </phase-listener>
</lifecycle>

有人能帮我找到解决方案吗?非常感谢您的帮助。

0 个答案:

没有答案