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/08 22:37:30 UTC
svn commit: r1068593 - in /myfaces/tobago/trunk:
tobago-core/src/main/java/org/apache/myfaces/tobago/ajax/
tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/
tobago-extension/tobago-deprecation/src/main/java/org/apache/myfaces/tobago/aj...
Author: bommel
Date: Tue Feb 8 21:37:29 2011
New Revision: 1068593
URL: http://svn.apache.org/viewvc?rev=1068593&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/util/ResponseUtils.java
myfaces/tobago/trunk/tobago-extension/tobago-deprecation/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java
myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js
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=1068593&r1=1068592&r2=1068593&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 Tue Feb 8 21:37:29 2011
@@ -18,24 +18,18 @@ package org.apache.myfaces.tobago.ajax;
*/
+import org.apache.myfaces.tobago.internal.ajax.AjaxInternalUtils;
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.io.Writer;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -104,32 +98,32 @@ public class AjaxUtils {
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);
- }
+ HttpServletResponse httpServletResponse
+ = (HttpServletResponse) facesContext.getExternalContext().getResponse();
+ Writer writer = httpServletResponse.getWriter();
+ String contentType = "application/json; charset=UTF-8";
+ ResponseUtils.ensureContentTypeHeader(facesContext, contentType);
ResponseUtils.ensureNoCacheHeader(facesContext);
- writer.startElement("redirect", null);
- writer.writeAttribute("url", url, null);
- writer.endElement("redirect");
- writer.flush();
+ redirectInternal(writer, url);
+ writer.close();
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>");
+ private static void redirectInternal(Writer writer, String url) throws IOException {
+ writer.write("{\n \"tobagoAjaxResponse\": true,\n");
+ writer.write(" \"responseCode\": 302,\n");
+ writer.write(" \"location\": \"");
+ writer.write(url);
+ writer.write("\"\n}\n");
+ writer.flush();
+ }
+
+ public static void redirect(HttpServletResponse response, String url) throws IOException {
+ PrintWriter writer = response.getWriter();
+ String contentType = "application/json; charset=UTF-8";
+ ResponseUtils.ensureContentTypeHeader(response, contentType);
+ ResponseUtils.ensureNoCacheHeader(response);
+ redirectInternal(writer, url);
}
}
Modified: myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/ResponseUtils.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/ResponseUtils.java?rev=1068593&r1=1068592&r2=1068593&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/ResponseUtils.java (original)
+++ myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/ResponseUtils.java Tue Feb 8 21:37:29 2011
@@ -37,32 +37,40 @@ public class ResponseUtils {
ExternalContext externalContext = facesContext.getExternalContext();
if (externalContext.getResponse() instanceof HttpServletResponse) {
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
- response.setHeader("Cache-Control", "no-cache,no-store,max-age=0,must-revalidate");
- response.setHeader("Pragma", "no-cache");
- response.setDateHeader("Expires", 0);
- response.setDateHeader("max-age", 0);
+ ensureNoCacheHeader(response);
}
}
+ public static void ensureNoCacheHeader(HttpServletResponse response) {
+ response.setHeader("Cache-Control", "no-cache,no-store,max-age=0,must-revalidate");
+ response.setHeader("Pragma", "no-cache");
+ response.setDateHeader("Expires", 0);
+ response.setDateHeader("max-age", 0);
+ }
+
public static void ensureContentTypeHeader(FacesContext facesContext, String contentType) {
// TODO PortletRequest
if (facesContext.getExternalContext().getResponse() instanceof HttpServletResponse) {
HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
- if (!response.containsHeader("Content-Type")) {
- response.setContentType(contentType);
- } else {
- try {
- String responseContentType = response.getContentType();
- if (!responseContentType.equalsIgnoreCase(contentType)) {
- response.setContentType(contentType);
- if (LOG.isInfoEnabled()) {
- LOG.info("Reponse already contains Header Content-Type '" + responseContentType
- + "'. Setting Content-Type to '" + contentType + "'");
- }
+ ensureContentTypeHeader(response, contentType);
+ }
+ }
+
+ public static void ensureContentTypeHeader(HttpServletResponse response, String contentType) {
+ if (!response.containsHeader("Content-Type")) {
+ response.setContentType(contentType);
+ } else {
+ try {
+ String responseContentType = response.getContentType();
+ if (!responseContentType.equalsIgnoreCase(contentType)) {
+ response.setContentType(contentType);
+ if (LOG.isInfoEnabled()) {
+ LOG.info("Reponse already contains Header Content-Type '" + responseContentType
+ + "'. Setting Content-Type to '" + contentType + "'");
}
- } catch (Error e) {
- LOG.warn("The method ServletResponse.getContentType() is not available before Servlet 2.4");
}
+ } catch (Error e) {
+ LOG.warn("The method ServletResponse.getContentType() is not available before Servlet 2.4");
}
}
}
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=1068593&r1=1068592&r2=1068593&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 Tue Feb 8 21:37:29 2011
@@ -22,7 +22,7 @@ import org.apache.myfaces.tobago.interna
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
-import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
@@ -138,7 +138,7 @@ public class AjaxUtils {
* @deprecated Please use org.apache.myfaces.tobago.ajax.AjaxUtils.redirect
*/
@Deprecated
- public static void redirect(ServletResponse response, String url) throws IOException {
+ public static void redirect(HttpServletResponse response, String url) throws IOException {
org.apache.myfaces.tobago.ajax.AjaxUtils.redirect(response, url);
}
}
Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js?rev=1068593&r1=1068592&r2=1068593&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js Tue Feb 8 21:37:29 2011
@@ -2243,6 +2243,8 @@ var LOG = {
Tobago.Updater = {
CODE_SUCCESS: 200,
+ CODE_REDIRECT: 302,
+
CODE_NOT_MODIFIED: 304,
CODE_RELOAD_REQUIRED: 309,
@@ -2362,6 +2364,9 @@ Tobago.Updater = {
alert('wait: full reload requeste: responseCode = ' + requestOptions.resultData.responseCode);
}
Tobago.submitAction(null, Tobago.page.id);
+ } else if (requestOptions.resultData.responseCode == Tobago.Updater.CODE_REDIRECT) {
+ window.location = requestOptions.resultData.location;
+ return;
}
Tobago.replaceJsfState(requestOptions.resultData.jsfState);