You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2008/08/29 01:45:57 UTC
svn commit: r690050 - in
/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket:
ajaxng/AjaxRequestTarget.java ajaxng/js/wicket-ajax-ng.js
protocol/http/WebResponse.java
Author: knopp
Date: Thu Aug 28 16:45:57 2008
New Revision: 690050
URL: http://svn.apache.org/viewvc?rev=690050&view=rev
Log:
redirect
Modified:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestTarget.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/protocol/http/WebResponse.java
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestTarget.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestTarget.java?rev=690050&r1=690049&r2=690050&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestTarget.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestTarget.java Thu Aug 28 16:45:57 2008
@@ -64,8 +64,7 @@
* it is desirable to link component update with some javascript effects.
* <p>
* The target provides a listener interface {@link IListener} that can be used to add code that
- * responds to various target events by adding listeners via
- * {@link #addListener(IListener)}
+ * responds to various target events by adding listeners via {@link #addListener(IListener)}
*
* @since 1.2
*
@@ -149,8 +148,6 @@
private static final Logger log = LoggerFactory.getLogger(AjaxRequestTarget.class);
- private String redirect = null;
-
// whether a header contribution is being rendered
private boolean headerRendering = false;
private HtmlHeaderContainer header = null;
@@ -429,8 +426,8 @@
* @param entry
* component entry to be rendered
*
- * @return <code>true</code> if the component was added, <code>false</code> if the
- * component or some of it's parents is already in the list
+ * @return <code>true</code> if the component was added, <code>false</code> if the component
+ * or some of it's parents is already in the list
*/
public boolean addComponent(ComponentEntry entry)
{
@@ -470,8 +467,8 @@
* @param component
* component to be rendered
*
- * @return <code>true</code> if the component was added, <code>false</code> if the
- * component or some of it's parents is already in the list
+ * @return <code>true</code> if the component was added, <code>false</code> if the component
+ * or some of it's parents is already in the list
*/
public boolean addComponent(Component component)
@@ -910,16 +907,6 @@
return stringResponse.toString();
}
- /**
- *
- * @param redirect
- */
- public void setRedirect(String redirect)
- {
- // TODO: Implement redirect
- this.redirect = redirect;
- }
-
private void prepareRender()
{
for (Iterator<ComponentEntry> i = entries.iterator(); i.hasNext();)
@@ -1010,49 +997,42 @@
JSONObject response = new JSONObject();
- if (redirect != null)
- {
- response.put("redirect", redirect);
- }
- else
- {
- JSONArray components = new JSONArray();
- response.put("components", components);
+ JSONArray components = new JSONArray();
+ response.put("components", components);
- if (!entries.isEmpty())
- {
- prepareRender();
+ if (!entries.isEmpty())
+ {
+ prepareRender();
- response.put("header", respondHeaderContribution());
+ response.put("header", respondHeaderContribution());
- for (ComponentEntry entry : entries)
- {
- components.put(renderComponentEntry(entry));
- }
+ for (ComponentEntry entry : entries)
+ {
+ components.put(renderComponentEntry(entry));
}
+ }
- fireOnAfterRespondListeners(entries);
+ fireOnAfterRespondListeners(entries);
- JSONArray prependJavascripts = new JSONArray();
- response.put("prependJavascript", prependJavascripts);
+ JSONArray prependJavascripts = new JSONArray();
+ response.put("prependJavascript", prependJavascripts);
- for (JavascriptEntry e : this.prependJavascripts)
- {
- prependJavascripts.put(renderJavascriptEntry(e));
- }
+ for (JavascriptEntry e : this.prependJavascripts)
+ {
+ prependJavascripts.put(renderJavascriptEntry(e));
+ }
- JSONArray appendJavascripts = new JSONArray();
- response.put("appendJavascript", appendJavascripts);
+ JSONArray appendJavascripts = new JSONArray();
+ response.put("appendJavascript", appendJavascripts);
- for (JavascriptEntry e : this.domReadyJavascripts)
- {
- appendJavascripts.put(renderJavascriptEntry(e));
- }
+ for (JavascriptEntry e : this.domReadyJavascripts)
+ {
+ appendJavascripts.put(renderJavascriptEntry(e));
+ }
- for (JavascriptEntry e : this.appendJavascripts)
- {
- appendJavascripts.put(renderJavascriptEntry(e));
- }
+ for (JavascriptEntry e : this.appendJavascripts)
+ {
+ appendJavascripts.put(renderJavascriptEntry(e));
}
WebResponse webResponse = (WebResponse)requestCycle.getResponse();
@@ -1063,6 +1043,29 @@
webResponse.write(")");
}
+ /**
+ * Renders a redirect response to the response object. This is used to send the redirect to
+ * client outside {@link AjaxRequestTarget#respond(RequestCycle)}.
+ *
+ * @param response
+ * @param url
+ */
+ public static void sendRedirect(WebResponse response, String url)
+ {
+ JSONObject object = new JSONObject();
+ object.put("redirect", url);
+ try
+ {
+ response.getHttpServletResponse().getWriter().write("if (false) (");
+ response.getHttpServletResponse().getWriter().write(object.toString());
+ response.getHttpServletResponse().getWriter().write(")");
+ }
+ catch (Exception e)
+ {
+ log.error("Error sending redirect", e);
+ }
+ }
+
private void prepareResponse(WebResponse response)
{
final Application app = Application.get();
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js?rev=690050&r1=690049&r2=690050&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js Thu Aug 28 16:45:57 2008
@@ -1884,8 +1884,19 @@
}
},
+ processRedirect: function(url)
+ {
+ window.location = url;
+ },
+
processResponse: function(response)
{
+ if (L.isString(response.redirect))
+ {
+ this.processRedirect(response.redirect);
+ this.success();
+ }
+
var steps = new Array();
this.processJavascripts(response.prependJavascript, steps);
@@ -1918,7 +1929,10 @@
var response = eval(responseText);
log.debug("RequestQueue", "Response parsed: ", response);
- this.processResponse(response);
+ if (L.isObject(response))
+ {
+ this.processResponse(response);
+ }
}
catch (exception)
{
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/protocol/http/WebResponse.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/protocol/http/WebResponse.java?rev=690050&r1=690049&r2=690050&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/protocol/http/WebResponse.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/protocol/http/WebResponse.java Thu Aug 28 16:45:57 2008
@@ -25,6 +25,7 @@
import org.apache.wicket.Response;
import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.ajaxng.AjaxRequestTarget;
import org.apache.wicket.util.string.AppendingStringBuffer;
import org.apache.wicket.util.string.Strings;
import org.apache.wicket.util.time.Time;
@@ -223,9 +224,10 @@
*/
httpServletResponse.addHeader("Ajax-Location", url);
+ AjaxRequestTarget.sendRedirect(this, url);
// safari chokes on empty response. but perhaps this is
// not the best place?
- httpServletResponse.getWriter().write(" ");
+ //httpServletResponse.getWriter().write(" ");
}
else
{