2008-10-02 15 views

Respuesta

14

erk. La respuesta correcta sería ajax call backs. Puede codificar manualmente el js para engancharlo en wicket js, o puede configurar las devoluciones de llamadas desde componentes de wicket en java. Por ejemplo, desde AjaxLazyLoadPanel:

 component.add(new AbstractDefaultAjaxBehavior() { 

     @Override 
     protected void respond(AjaxRequestTarget target) { 
      // your code here 
     } 

     @Override 
     public void renderHead(IHeaderResponse response) { 
      super.renderHead(response); 
      response.renderOnDomReadyJavascript(getCallbackScript().toString()); 
     } 

     } 

Este ejemplo muestra cómo agregar código de devolver la llamada a cualquiera de los componentes en la peatonal incorporada. Después de que el evento OnDomReady se active en su navegador, cuando cargue una página, Wicket causará su js enging, para volver a llamar a su código, utilizando Ajax, al método 'responder' mostrado arriba, en cuyo punto puede ejecutar código Java en el servidor, y potencialmente agregar componentes al objetivo ajax para volver a generar.

Para hacerlo manualmente, desde js, puede enganchar en el sistema de wicket imprimiendo getCallbackScript(). ToString() a un atributo en un componente de wicket, al que luego podrá acceder desde js. Llamar a esta url desde js manualmente con wicket's wicketAjaxGet desde wicket-ajax.js.

Mira la lista de correo para mucho de la conversación sobre este tema: http://www.nabble.com/Wicket-and-javascript-ts24336438.html#a24336438

+9

la última el enlace no funciona –

0

Suponiendo que se refiere a la ejecución de JavaScript en el cliente, usted causa que se realice una redirección HTTP al servidor y que su servlet reaccione a la solicitud de la URL dada.

Esto se conoce como Ajax, y hay un number de libraries que ayudará a hacerlo ..

5

Extracto de https://cwiki.apache.org/WICKET/calling-wicket-from-javascript.html

Si agrega cualquier clase que se extiende AbstractDefaultAjaxBehavior a su página, se agregará wicket-ajax.js al encabezado de tu página web. portillo-ajax.js le proporciona dos métodos básicos para llamar a su componente:

function wicketAjaxGet(url, successHandler, failureHandler, precondition, channel) 

y

function wicketAjaxPost(url, body, successHandler, failureHandler, precondition, channel) 

Aquí se muestra un ejemplo:

JavaScript

function callWicket() { 
    var wcall = wicketAjaxGet('$url$' + '$args$', function() { }, function() { }); 
} 

$url$ es obtenido a partir del método abstractDefaultAjaxBehavior.getCallbackUrl(). Si pega la Cadena devuelta desde ese método en su navegador, invocará el método responder, lo mismo aplica para el método javascript.

Opcionalmente, puede agregar argumentos al agregarlos a la cadena de URL. Toman la forma &foo=bar.

que obtener los argumentos opcionales en el método de respuesta de Java como esto:

Map map = ((WebRequestCycle) RequestCycle.get()).getRequest().getParameterMap(); 

o esto:

String paramFoo = RequestCycle.get().getRequest().getParameter("foo"); 
+1

Vale la pena mencionar que la API para extraer parámetros ha cambiado en Wicket 1.5. Habiendo llamado a 'RequestCycle.get(). GetRequest()' para obtener un objeto 'Request', ahora debe llamar a' getQueryParameters() '(para los parámetros GET),' getPostParameters() '(para los parámetros POST), o' getRequestParameters() '(para todos a la vez). Cada uno devuelve una instancia 'IRequestParameters' que puede consultar para parámetros. Ver [los documentos de API] (http://wicket.apache.org/apidocs/1.5/). – cooperised

+0

Ah, y un gotcha: la URL devuelta por 'getCallbackUrl()' puede cambiar durante el ciclo de construcción del componente. A menudo es incorrecto si intenta usarlo en el constructor, y las devoluciones de llamada fallarán como resultado. Tuve éxito al utilizarlo en lugar de anular el 'onBeforeRender()' del componente. – cooperised

Cuestiones relacionadas