title: Call Java component from JavaScript and retrieve value
body: <p>I am trying to call a Wicket component's method from JavaScript and receive a value from this method which I want to use in the remaining bit of the JavaScript function which I used to call the component. However, I only seem to be able to call a Wicket component without waiting for it to produce a result.</p>
  
  <p>More explicitly, I want to implement an <code>AbstractDefaultAjaxBehavior</code> which allows me to conditionally warn a user when he or she is leaving a page. This condition is for now determined by some <code>OuterClass.shouldWarn</code> method. However, even though this method gets called in my example below, I seem to be both unable to wait for a result of this method as well as I am unable to return some sort of result at all. Instead, the JavaScript just continues in its execution concurrently to the Java method call.</p>
  
  <p>I hope the (not correctly running) example below clarifies my question:</p>
  
  <pre><code> class PageExitWarningBehavior extends AbstractDefaultAjaxBehavior {
  
          @Override
          protected void respond(AjaxRequestTarget target) {
              target.appendJavaScript("return " + 
                  (OuterClass.this.shouldWarn() ? "false" : "true"));
          }
  
          @Override
          public void renderHead(Component component, IHeaderResponse response) {
  
              String callbackFunktion = String.format(
                      "Wicket.Event.add(window, 'beforeunload', function( e ) {%n"
                            + "if( e ) { e.returnValue = '%s'; }%n"
                            + "var attrs = { 'u': '%s', 'c': '%s', 'ep': { } };%n"
                            + "Wicket.Ajax.get( attrs );%n"
                            + "return false;%n;"
                            + "});",
                      this.getCallbackUrl(),
                      OuterClass.this.getMarkupId());
  
              response.render(JavaScriptHeaderItem.forScript(callbackFunktion, 
                   "remind-of-running-task"));
          }
  
      }
  </code></pre>