This commit is contained in:
Keith Donald
2008-04-29 03:38:21 +00:00
parent ac04db9067
commit a9638eb643
4 changed files with 39 additions and 29 deletions

View File

@@ -26,37 +26,47 @@ import javax.servlet.http.HttpServletResponse;
import org.ajax4jsf.context.AjaxContext;
import org.springframework.faces.webflow.FlowLifecycle;
import org.springframework.js.ajax.AjaxHandler;
import org.springframework.js.ajax.SpringJavascriptAjaxHandler;
import org.springframework.web.context.support.WebApplicationObjectSupport;
/**
* Ajax handler that works with Rich Faces, allowing support for Web Flow ajax features with the Rich Faces toolkit.
*
* @author Jeremy Grelle
*/
public class RichFacesAjaxHandler extends SpringJavascriptAjaxHandler {
public class RichFacesAjaxHandler extends WebApplicationObjectSupport {
public boolean isAjaxRequest(ServletContext context, HttpServletRequest request, HttpServletResponse response) {
private AjaxHandler delegate = new SpringJavascriptAjaxHandler();
public boolean isAjaxRequest(HttpServletRequest request, HttpServletResponse response) {
FacesContextHelper helper = new FacesContextHelper();
if (AjaxContext.getCurrentInstance(helper.getFacesContext(context, request, response)).isAjaxRequest(
helper.getFacesContext(context, request, response))) {
try {
if (AjaxContext.getCurrentInstance(helper.getFacesContext(getServletContext(), request, response))
.isAjaxRequest(helper.getFacesContext(getServletContext(), request, response))) {
return true;
} else {
return delegate.isAjaxRequest(request, response);
}
} finally {
helper.cleanup();
return true;
} else {
helper.cleanup();
return super.isAjaxRequest(context, request, response);
}
}
public void sendAjaxRedirect(ServletContext context, HttpServletRequest request, HttpServletResponse response,
String targetUrl, boolean popup) throws IOException {
public void sendAjaxRedirect(String targetUrl, HttpServletRequest request, HttpServletResponse response,
boolean popup) throws IOException {
FacesContextHelper helper = new FacesContextHelper();
if (AjaxContext.getCurrentInstance(helper.getFacesContext(context, request, response)).isAjaxRequest(
helper.getFacesContext(context, request, response))) {
try {
if (AjaxContext.getCurrentInstance(helper.getFacesContext(getServletContext(), request, response))
.isAjaxRequest(helper.getFacesContext(getServletContext(), request, response))) {
helper.cleanup();
response.sendRedirect(response.encodeRedirectURL(targetUrl));
} else {
helper.cleanup();
delegate.sendAjaxRedirect(targetUrl, request, response, popup);
}
} finally {
helper.cleanup();
response.sendRedirect(response.encodeRedirectURL(targetUrl));
} else {
helper.cleanup();
super.sendAjaxRedirect(context, request, response, targetUrl, popup);
}
}

View File

@@ -35,7 +35,6 @@ import org.springframework.context.ApplicationContext;
import org.springframework.core.io.ContextResource;
import org.springframework.core.io.Resource;
import org.springframework.faces.ui.AjaxViewRoot;
import org.springframework.js.ajax.AjaxHandler;
import org.springframework.js.ajax.SpringJavascriptAjaxHandler;
import org.springframework.webflow.context.ExternalContext;
import org.springframework.webflow.execution.RequestContext;
@@ -54,6 +53,8 @@ public class JsfViewFactory implements ViewFactory {
private static final Log logger = LogFactory.getLog(JsfViewFactory.class);
private static SpringJavascriptAjaxHandler springJsAjaxHandler = new SpringJavascriptAjaxHandler();
private final Expression viewIdExpression;
private final Lifecycle lifecycle;
@@ -136,11 +137,10 @@ public class JsfViewFactory implements ViewFactory {
}
private boolean isSpringJavascriptAjaxRequest(ExternalContext context) {
// this is not very clean
// consider factoring out into external context
if (context.getNativeContext() instanceof ServletContext) {
AjaxHandler handler = new SpringJavascriptAjaxHandler();
return handler.isAjaxRequest((ServletContext) context.getNativeContext(), (HttpServletRequest) context
.getNativeRequest(), (HttpServletResponse) context.getNativeResponse());
return springJsAjaxHandler.isAjaxRequest((HttpServletRequest) context.getNativeRequest(),
(HttpServletResponse) context.getNativeResponse());
} else {
return false;
}