我正在使用看起来像这样的按钮:
<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>
有人能帮我找到解决方案吗?非常感谢您的帮助。