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 2007/05/12 18:02:24 UTC
svn commit: r537474 - in /incubator/wicket/trunk/jdk-1.4/wicket/src:
main/java/org/apache/wicket/ajax/
test/java/org/apache/wicket/ajax/markup/html/componentMap/
Author: knopp
Date: Sat May 12 09:02:23 2007
New Revision: 537474
URL: http://svn.apache.org/viewvc?view=rev&rev=537474
Log:
WICKET-556 Prevent setTimeout for AjaxSelfUpdatingTimerBehavior from firing after its contributing component has been replaced
Modified:
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/componentMap/SimpleTestPageExpectedResult.html
Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java?view=diff&rev=537474&r1=537473&r2=537474
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java (original)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java Sat May 12 09:02:23 2007
@@ -74,10 +74,23 @@
protected final String getJsTimeoutCall(final Duration updateInterval)
{
// this might look strange, but it is necessary for IE not to leak :(
- return "setTimeout(\"" + getCallbackScript(true) + "\", "
+ return "setTimeout(\"" + getCallbackScript() + "\", "
+ updateInterval.getMilliseconds() + ");";
}
+ protected CharSequence getCallbackScript()
+ {
+ String componentId = getComponent().getMarkupId();
+ String precondition = "var c = Wicket.$('" + componentId + "'); return typeof(c) != 'undefined' && c != null";
+
+ return getCallbackScript("wicketAjaxGet('"
+ + getCallbackUrl(onlyTargetActivePage()) + "'", null, null, precondition);
+ }
+
+ protected boolean onlyTargetActivePage() {
+ return true;
+ }
+
/**
*
* @see org.apache.wicket.ajax.AbstractDefaultAjaxBehavior#respond(org.apache.wicket.ajax.AjaxRequestTarget)
Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java?view=diff&rev=537474&r1=537473&r2=537474
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java (original)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java Sat May 12 09:02:23 2007
@@ -136,6 +136,36 @@
protected CharSequence getCallbackScript(final CharSequence partialCall,
final CharSequence onSuccessScript, final CharSequence onFailureScript)
{
+ return getCallbackScript(partialCall, onSuccessScript, onFailureScript, null);
+ }
+
+ /**
+ * Returns javascript that performs an ajax callback to this behavior. The
+ * script is decorated by the ajax callback decorator from
+ * {@link AbstractDefaultAjaxBehavior#getAjaxCallDecorator()}.
+ *
+ * @param partialCall
+ * Javascript of a partial call to the function performing the
+ * actual ajax callback. Must be in format
+ * <code>function(params,</code> with signature
+ * <code>function(params, onSuccessHandler, onFailureHandler</code>.
+ * Example: <code>wicketAjaxGet('callbackurl'</code>
+ * @param onSuccessScript
+ * javascript that will run when the ajax call finishes
+ * successfully
+ * @param onFailureScript
+ * javascript that will run when the ajax call finishes with an
+ * error status
+ * @param precondition
+ * optional javacript expression that determines whether the request
+ * will actually execute (in form of return XXX;);
+ *
+ * @return script that peforms ajax callback to this behavior
+ */
+ protected CharSequence getCallbackScript(final CharSequence partialCall,
+ final CharSequence onSuccessScript, final CharSequence onFailureScript,
+ final CharSequence precondition)
+ {
final IAjaxCallDecorator decorator = getAjaxCallDecorator();
String indicatorId = findIndicatorId();
@@ -163,7 +193,16 @@
AppendingStringBuffer buff = new AppendingStringBuffer(256);
buff.append("var ").append(IAjaxCallDecorator.WICKET_CALL_RESULT_VAR).append("=");
buff.append(partialCall).append(", function() { ").append(success);
- buff.append("}.bind(this), function() { ").append(failure).append("}.bind(this));");
+ buff.append("}.bind(this), function() { ").append(failure).append("}.bind(this)");
+
+ if (precondition != null)
+ {
+ buff.append(", function() {");
+ buff.append(precondition);
+ buff.append("}");
+ }
+
+ buff.append(");");
CharSequence call = buff;
Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js?view=diff&rev=537474&r1=537473&r2=537474
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js (original)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js Sat May 12 09:02:23 2007
@@ -621,6 +621,7 @@
this.failureHandler = failureHandler != null ? failureHandler : function() { };
this.async = true;
this.channel = channel;
+ this.precondition = function() { return true; } // allow a condition to block request
// when suppressDone is set, the loadedCallback is responsible for calling
// Ajax.Request.done() to process possibly pendings requests in the channel.
@@ -664,24 +665,29 @@
// The actual get request implementation
doGet: function() {
- this.transport = Wicket.Ajax.getTransport();
+ if (this.precondition()) {
- var url = this.createUrl();
- this.log("GET", url);
+ this.transport = Wicket.Ajax.getTransport();
- Wicket.Ajax.invokePreCallHandlers();
-
- var t = this.transport;
- if (t != null) {
- t.open("GET", url, this.async);
- t.onreadystatechange = this.stateChangeCallback.bind(this);
- // set a special flag to allow server distinguish between ajax and non-ajax requests
- t.setRequestHeader("Wicket-Ajax", "true");
- t.send(null);
- return true;
+ var url = this.createUrl();
+ this.log("GET", url);
+
+ Wicket.Ajax.invokePreCallHandlers();
+
+ var t = this.transport;
+ if (t != null) {
+ t.open("GET", url, this.async);
+ t.onreadystatechange = this.stateChangeCallback.bind(this);
+ // set a special flag to allow server distinguish between ajax and non-ajax requests
+ t.setRequestHeader("Wicket-Ajax", "true");
+ t.send(null);
+ return true;
+ } else {
+ this.failure();
+ return false;
+ }
} else {
- this.failure();
- return false;
+ return null;
}
},
@@ -697,25 +703,29 @@
// The actual post implementation
doPost: function(body) {
- this.transport = Wicket.Ajax.getTransport();
-
- var url = this.createUrl();
- this.log("POST", url);
-
- Wicket.Ajax.invokePreCallHandlers();
+ if (this.precondition()) {
+ this.transport = Wicket.Ajax.getTransport();
- var t = this.transport;
- if (t != null) {
- t.open("POST", url, this.async);
- t.onreadystatechange = this.stateChangeCallback.bind(this);
- t.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- // set a special flag to allow server distinguish between ajax and non-ajax requests
- t.setRequestHeader("Wicket-Ajax", "true");
- t.send(body);
- return true;
+ var url = this.createUrl();
+ this.log("POST", url);
+
+ Wicket.Ajax.invokePreCallHandlers();
+
+ var t = this.transport;
+ if (t != null) {
+ t.open("POST", url, this.async);
+ t.onreadystatechange = this.stateChangeCallback.bind(this);
+ t.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+ // set a special flag to allow server distinguish between ajax and non-ajax requests
+ t.setRequestHeader("Wicket-Ajax", "true");
+ t.send(body);
+ return true;
+ } else {
+ this.failure();
+ return false;
+ }
} else {
- this.failure();
- return false;
+ return null;
}
},
@@ -1523,8 +1533,12 @@
var wicketThrottler = Wicket.throttler;
-function wicketAjaxGet(url, successHandler, failureHandler, channel) {
+function wicketAjaxGet(url, successHandler, failureHandler, precondition, channel) {
var call = new Wicket.Ajax.Call(url, successHandler, failureHandler, channel);
+
+ if (typeof(precondition) != "undefined" && precondition != null) {
+ call.request.precondition = precondition;
+ }
return call.call();
}
Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/componentMap/SimpleTestPageExpectedResult.html
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/componentMap/SimpleTestPageExpectedResult.html?view=diff&rev=537474&r1=537473&r2=537474
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/componentMap/SimpleTestPageExpectedResult.html (original)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/componentMap/SimpleTestPageExpectedResult.html Sat May 12 09:02:23 2007
@@ -9,7 +9,7 @@
<script type="text/javascript" src="resources/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/wicket-ajax-debug.js"></script>
<script type="text/javascript" ><!--/*--><![CDATA[/*><!--*/
-Wicket.Event.add(window, "load", function() { setTimeout("var wcall=wicketAjaxGet('?wicket:interface=:0:testPanel:baseSpan:linja1::IBehaviorListener:0&wicket:ignoreIfNotActive=true', function() { }.bind(this), function() { }.bind(this));", 2000);;});
+Wicket.Event.add(window, "load", function() { setTimeout("var wcall=wicketAjaxGet('?wicket:interface=:0:testPanel:baseSpan:linja1::IBehaviorListener:0&wicket:ignoreIfNotActive=true', function() { }.bind(this), function() { }.bind(this), function() {var c = Wicket.$('linja10'); return typeof(c) != 'undefined' && c != null});", 2000);;});
/*-->]]>*/</script>
</head>