You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by bo...@apache.org on 2011/02/02 23:02:18 UTC

svn commit: r1066652 - in /myfaces/tobago/trunk: tobago-core/src/main/java/org/apache/myfaces/tobago/ajax/ tobago-core/src/main/java/org/apache/myfaces/tobago/internal/ajax/ tobago-extension/tobago-deprecation/src/main/java/org/apache/myfaces/tobago/aj...

Author: bommel
Date: Wed Feb  2 22:02:18 2011
New Revision: 1066652

URL: http://svn.apache.org/viewvc?rev=1066652&view=rev
Log:
(TOBAGO-969) Support for redirect in the ajax case

Modified:
    myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/ajax/AjaxUtils.java
    myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/ajax/AjaxInternalUtils.java
    myfaces/tobago/trunk/tobago-extension/tobago-deprecation/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java

Modified: myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/ajax/AjaxUtils.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/ajax/AjaxUtils.java?rev=1066652&r1=1066651&r2=1066652&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/ajax/AjaxUtils.java (original)
+++ myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/ajax/AjaxUtils.java Wed Feb  2 22:02:18 2011
@@ -18,13 +18,24 @@ package org.apache.myfaces.tobago.ajax;
  */
 
 
+import org.apache.myfaces.tobago.internal.util.ResponseUtils;
 import org.apache.myfaces.tobago.util.ComponentUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.myfaces.tobago.internal.ajax.AjaxInternalUtils;
 
+import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
+import javax.faces.application.ViewHandler;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -34,7 +45,9 @@ public class AjaxUtils {
   private static final Logger LOG = LoggerFactory.getLogger(AjaxUtils.class);
 
   public static boolean isAjaxRequest(FacesContext facesContext) {
-    return facesContext.getExternalContext().getRequestMap().containsKey(AjaxInternalUtils.AJAX_COMPONENTS);
+    Map parameterMap = facesContext.getExternalContext().getRequestParameterMap();
+    String ajaxComponentIds = (String) parameterMap.get(AjaxInternalUtils.TOBAGO_PARTIAL_IDS);
+    return ajaxComponentIds != null;
   }
 
   public static void removeAjaxComponent(FacesContext facesContext, String clientId) {
@@ -86,4 +99,37 @@ public class AjaxUtils {
     }
     return added;
   }
+
+  public static boolean redirect(FacesContext facesContext, String url) throws IOException {
+    if (!isAjaxRequest(facesContext)) {
+      return false;
+    }
+    ResponseWriter writer = facesContext.getResponseWriter();
+    if (writer == null) {
+      RenderKit renderKit = facesContext.getRenderKit();
+      if (renderKit == null) {
+        RenderKitFactory renderFactory = (RenderKitFactory) FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+        Application application = facesContext.getApplication();
+        ViewHandler applicationViewHandler = application.getViewHandler();
+        String renderKitId = applicationViewHandler.calculateRenderKitId(facesContext);
+        renderKit = renderFactory.getRenderKit(facesContext, renderKitId);
+      }
+      writer = renderKit.createResponseWriter(((HttpServletResponse)
+              facesContext.getExternalContext().getResponse()).getWriter(), null, null);
+    }
+    ResponseUtils.ensureNoCacheHeader(facesContext);
+    writer.startElement("redirect", null);
+    writer.writeAttribute("url", url, null);
+    writer.endElement("redirect");
+    writer.flush();
+    facesContext.responseComplete();
+    return true;
+  }
+
+  public static void redirect(ServletResponse response, String url) throws IOException {
+    PrintWriter out = response.getWriter();
+    out.print("<redirect url=");
+    out.print(url);
+    out.println("</redirect>");
+  }
 }

Modified: myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/ajax/AjaxInternalUtils.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/ajax/AjaxInternalUtils.java?rev=1066652&r1=1066651&r2=1066652&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/ajax/AjaxInternalUtils.java (original)
+++ myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/ajax/AjaxInternalUtils.java Wed Feb  2 22:02:18 2011
@@ -44,6 +44,7 @@ public class AjaxInternalUtils {
   public static final String AJAX_COMPONENTS = AjaxUtils.class.getName() + ".AJAX_COMPONENTS";
 
   private static final String TOBAGO_MESSAGES_CLIENT_IDS = "tobago.messages.clientIds";
+  public static final String TOBAGO_PARTIAL_IDS = "tobago::partialIds";
 
   public static void checkParamValidity(FacesContext facesContext, UIComponent uiComponent, Class compClass) {
     if (facesContext == null) {
@@ -117,7 +118,7 @@ public class AjaxInternalUtils {
 
   public static Map<String, UIComponent> parseAndStoreComponents(FacesContext facesContext) {
     Map parameterMap = facesContext.getExternalContext().getRequestParameterMap();
-    String ajaxComponentIds = (String) parameterMap.get("tobago::partialIds");
+    String ajaxComponentIds = (String) parameterMap.get(TOBAGO_PARTIAL_IDS);
     if (ajaxComponentIds != null) {
       if (LOG.isDebugEnabled()) {
         LOG.debug("ajaxComponentIds = \"" + ajaxComponentIds + "\"");

Modified: myfaces/tobago/trunk/tobago-extension/tobago-deprecation/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-extension/tobago-deprecation/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java?rev=1066652&r1=1066651&r2=1066652&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-extension/tobago-deprecation/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java (original)
+++ myfaces/tobago/trunk/tobago-extension/tobago-deprecation/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java Wed Feb  2 22:02:18 2011
@@ -22,6 +22,7 @@ import org.apache.myfaces.tobago.interna
 
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
+import javax.servlet.ServletResponse;
 import java.io.IOException;
 import java.util.Map;
 
@@ -124,4 +125,20 @@ public class AjaxUtils {
   public static String encodeJavascriptString(String value) {
     return AjaxInternalUtils.encodeJavaScriptString(value);
   }
+
+  /**
+   * @deprecated Please use org.apache.myfaces.tobago.ajax.AjaxUtils.redirect
+   */
+  @Deprecated
+  public static void redirect(FacesContext facesContext, String url) throws IOException {
+    org.apache.myfaces.tobago.ajax.AjaxUtils.redirect(facesContext, url);
+  }
+
+  /**
+   * @deprecated Please use org.apache.myfaces.tobago.ajax.AjaxUtils.redirect
+   */
+  @Deprecated
+  public static void redirect(ServletResponse response, String url) throws IOException {
+    org.apache.myfaces.tobago.ajax.AjaxUtils.redirect(response, url);
+  }
 }