Re: [Wicket-user] Using AJAX wicketSubmitFormById like a method call

2007-05-04 Thread James Renfro
Igor,
I had a feeling that was the situation. I'll take a closer look at my 
code with that in mind and if I can come up with a clear follow up 
question, I'll post some relevant excerpts.

Thanks very much for your help,
James.

Igor Vaynberg wrote:
 the short answer is: you cant do that. javascript is asynchronous, so 
 the request will start _and_ your function will continue running. 
 usually what is done is that you create a request object, and then 
 register success and failure handlers that are executed after the 
 request is done.

 you can do that using iajaxcalldecorator, or what you tried...calling 
 ajaxtarget.appendjavascript() should work as well.

 if you show us some more code/try to describe your actual usecase we 
 can probably help you more, right now its all very abstract.

 -igor


 On 5/3/07, *James Renfro* [EMAIL PROTECTED] 
 mailto:[EMAIL PROTECTED] wrote:

 Hi,
 I'd like to do something slightly unusual and wrap the
 wicketSubmitFormById call in another javascript function -- I'm
 able to
 do this with no problem by overriding
 AjaxFormSubmitBehavor.onRenderHeadInitContribution and calling
 JavascriptUtils.writeJavascript on a wrapped getEventHandler. I
 can stop
 the normal attribute for 'onclick' or whatever from appearing
 inside the
 component tag by overriding onComponentTag. And by using text input
 boxes, I can pass 'arguments' to my method on the server inside using
 FormComponent.getConvertedInput. So far so good.

 The problem I have is that I'd like to actually 'return' a value back
 from the server in that Javascript function... so my function ends up
 looking just like a normal function call inside of my Javascript and
 returns the value that the server provides.

 I can see inside of wicket-ajax.js that there are three special tags:
 component, evaluate and header-contribution, each with their
 appropriate purpose -- I tried messing around with
 AjaxRequestTarget.prependJavascript so I could pass something through
 the 'evaluate' tag, but my javascript isn't sufficient to the
 task. Then
 I tried using AjaxRequestTarget.addComponent to modify another
 TextField
 and return the value through the DOM tree -- that works fine
 except for
 the fact that the order is wrong, so my method returns _before_ the
 component is updated.

 Then I noticed this interesting Wicket.Ajax.invokePostCallHandlers()
 call, which makes me wonder if there is already some nice clean
 mechanism in place for updating javascript variables thru wicket's
 java
 code.

 Apologies if this all makes no sense, but any advice or suggestions
 would be much appreciated. The basic requirement is just that I
 make a
 call in Javascript and get data back from the server as a 'returned'
 variable on the client.

 Thanks,
 James

 --
 James Renfro
 Programmer
 IET Mediaworks, UC Davis
 [EMAIL PROTECTED] mailto:[EMAIL PROTECTED]
 W: 530-754-5097


 -
 This SF.net email is sponsored by DB2 Express
 Download DB2 Express C - the FREE version of DB2 express and take
 control of your XML. No limits. Just data. Click to get it now.
 http://sourceforge.net/powerbar/db2/
 ___
 Wicket-user mailing list
 Wicket-user@lists.sourceforge.net
 mailto:Wicket-user@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/wicket-user


 

 -
 This SF.net email is sponsored by DB2 Express
 Download DB2 Express C - the FREE version of DB2 express and take
 control of your XML. No limits. Just data. Click to get it now.
 http://sourceforge.net/powerbar/db2/
 

 ___
 Wicket-user mailing list
 Wicket-user@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/wicket-user
   

-- 
James Renfro
Programmer
IET Mediaworks, UC Davis
[EMAIL PROTECTED]
W: 530-754-5097


-
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user


Re: [Wicket-user] Using AJAX wicketSubmitFormById like a method call

2007-05-04 Thread James Renfro
So although clearly AJAX is supposed to be mostly asynchronous. it looks 
like the underlying XMLHttpRequest object _can_ be synchronous.

If I modify wicket-ajax.js and set 'Wicket.Ajax.Request.async' to 
*false* -- suddenly my code works... i.e. I can code an 
AjaxFormSubmitBehavor.onSubmit so it takes a value from one 
FormComponent (the argument to the function), modifies it (in this case 
toUppercase), and sends it back to another FormComponent, whose node I 
can grab from the DOM tree and return inside my function.

So I guess my question is -- am I going to break something fundamental 
by doing this? It seem to work fine in my test case.

Javascript_function

script type=text/javascript id=onTestMethod1!--/*--![CDATA[/*!--*/
TestMethod1 = function () { 
var wcall=wicketSubmitFormById('form', 
'/portal/tool/52480496-d4f6-4278-0002-e65fdefcc0ef/?wicket:interface=wicket-247:0:form:-1:IUnversionedBehaviorListenerwicket:behaviorId=0wicket:ignoreIfNotActive=true',
 null, function() { }, function() { }); 
return document.getElementById('form_result').value;;};
/*--]]*//script

/Javascript_function

AjaxFormSubmitBehavior.onSubmit
@Override
protected void onSubmit(AjaxRequestTarget target) {
FormComponent c = (FormComponent)form.get(argument);
String testValue = (String)c.getConvertedInput();

FormComponent r = (FormComponent)form.get(result);
bean.setResult(testValue.toUpperCase());
target.addComponent(r);
}
/AjaxFormSubmitBehavior.onSubmit

wicket-ajax.js
Wicket.Ajax.Request.prototype = {
initialize: function(url, loadedCallback, parseResponse, randomURL, 
failureHandler, channel) {
this.url = url;
this.loadedCallback = loadedCallback;
this.parseResponse = parseResponse != null ? parseResponse : true;
this.randomURL = randomURL != null ? randomURL : true;
this.failureHandler = failureHandler != null ? failureHandler : 
function() { };
this.async = *true;*
this.channel = channel;
this.suppressDone = false;
this.instance = Math.random();
this.debugContent = true;
},
/wicket-ajax.js

Thanks,
James


Igor Vaynberg wrote:
 the short answer is: you cant do that. javascript is asynchronous, so 
 the request will start _and_ your function will continue running. 
 usually what is done is that you create a request object, and then 
 register success and failure handlers that are executed after the 
 request is done.

 you can do that using iajaxcalldecorator, or what you tried...calling 
 ajaxtarget.appendjavascript() should work as well.

 if you show us some more code/try to describe your actual usecase we 
 can probably help you more, right now its all very abstract.

 -igor


 On 5/3/07, *James Renfro* [EMAIL PROTECTED] 
 mailto:[EMAIL PROTECTED] wrote:

 Hi,
 I'd like to do something slightly unusual and wrap the
 wicketSubmitFormById call in another javascript function -- I'm
 able to
 do this with no problem by overriding
 AjaxFormSubmitBehavor.onRenderHeadInitContribution and calling
 JavascriptUtils.writeJavascript on a wrapped getEventHandler. I
 can stop
 the normal attribute for 'onclick' or whatever from appearing
 inside the
 component tag by overriding onComponentTag. And by using text input
 boxes, I can pass 'arguments' to my method on the server inside using
 FormComponent.getConvertedInput. So far so good.

 The problem I have is that I'd like to actually 'return' a value back
 from the server in that Javascript function... so my function ends up
 looking just like a normal function call inside of my Javascript and
 returns the value that the server provides.

 I can see inside of wicket-ajax.js that there are three special tags:
 component, evaluate and header-contribution, each with their
 appropriate purpose -- I tried messing around with
 AjaxRequestTarget.prependJavascript so I could pass something through
 the 'evaluate' tag, but my javascript isn't sufficient to the
 task. Then
 I tried using AjaxRequestTarget.addComponent to modify another
 TextField
 and return the value through the DOM tree -- that works fine
 except for
 the fact that the order is wrong, so my method returns _before_ the
 component is updated.

 Then I noticed this interesting Wicket.Ajax.invokePostCallHandlers()
 call, which makes me wonder if there is already some nice clean
 mechanism in place for updating javascript variables thru wicket's
 java
 code.

 Apologies if this all makes no sense, but any advice or suggestions
 would be much appreciated. The basic requirement is just that I
 make a
 call in Javascript and get data back from the server as a 'returned'
 variable on the client.

 Thanks,
 James

 --
 James Renfro
 

Re: [Wicket-user] Using AJAX wicketSubmitFormById like a method call

2007-05-04 Thread Igor Vaynberg

if you change wicket-ajax.js in the way you showed below then all ajax
requests will become synchronous. while you wont break anything foundamental
you will make parallel ajax requests impossible. not a good thing imho. i
guess we need to add a parameter so that you can set the request to
synchronous just for that one call.

or do what i suggested and add a success handler that will execute the rest
of the function.

-igor


On 5/4/07, James Renfro [EMAIL PROTECTED] wrote:


So although clearly AJAX is supposed to be mostly asynchronous. it looks
like the underlying XMLHttpRequest object _can_ be synchronous.

If I modify wicket-ajax.js and set 'Wicket.Ajax.Request.async' to
*false* -- suddenly my code works... i.e. I can code an
AjaxFormSubmitBehavor.onSubmit so it takes a value from one
FormComponent (the argument to the function), modifies it (in this case
toUppercase), and sends it back to another FormComponent, whose node I
can grab from the DOM tree and return inside my function.

So I guess my question is -- am I going to break something fundamental
by doing this? It seem to work fine in my test case.

Javascript_function

script type=text/javascript
id=onTestMethod1!--/*--![CDATA[/*!--*/
TestMethod1 = function () {
var wcall=wicketSubmitFormById('form',
'/portal/tool/52480496-d4f6-4278-0002-e65fdefcc0ef/?wicket:interface=wicket-247:0:form:-1:IUnversionedBehaviorListenerwicket:behaviorId=0wicket:ignoreIfNotActive=true',
null, function() { }, function() { });
return document.getElementById('form_result').value;;};
/*--]]*//script

/Javascript_function

AjaxFormSubmitBehavior.onSubmit
@Override
protected void onSubmit(AjaxRequestTarget target) {
FormComponent c = (FormComponent)form.get(argument);
String testValue = (String)c.getConvertedInput();

FormComponent r = (FormComponent)form.get(result);
bean.setResult(testValue.toUpperCase());
target.addComponent(r);
}
/AjaxFormSubmitBehavior.onSubmit

wicket-ajax.js
Wicket.Ajax.Request.prototype = {
initialize: function(url, loadedCallback, parseResponse, randomURL,
failureHandler, channel) {
this.url = url;
this.loadedCallback = loadedCallback;
this.parseResponse = parseResponse != null ? parseResponse : true;
this.randomURL = randomURL != null ? randomURL : true;
this.failureHandler = failureHandler != null ? failureHandler :
function() { };
this.async = *true;*
this.channel = channel;
this.suppressDone = false;
this.instance = Math.random();
this.debugContent = true;
},
/wicket-ajax.js

Thanks,
James


Igor Vaynberg wrote:
 the short answer is: you cant do that. javascript is asynchronous, so
 the request will start _and_ your function will continue running.
 usually what is done is that you create a request object, and then
 register success and failure handlers that are executed after the
 request is done.

 you can do that using iajaxcalldecorator, or what you tried...calling
 ajaxtarget.appendjavascript() should work as well.

 if you show us some more code/try to describe your actual usecase we
 can probably help you more, right now its all very abstract.

 -igor


 On 5/3/07, *James Renfro* [EMAIL PROTECTED]
 mailto:[EMAIL PROTECTED] wrote:

 Hi,
 I'd like to do something slightly unusual and wrap the
 wicketSubmitFormById call in another javascript function -- I'm
 able to
 do this with no problem by overriding
 AjaxFormSubmitBehavor.onRenderHeadInitContribution and calling
 JavascriptUtils.writeJavascript on a wrapped getEventHandler. I
 can stop
 the normal attribute for 'onclick' or whatever from appearing
 inside the
 component tag by overriding onComponentTag. And by using text input
 boxes, I can pass 'arguments' to my method on the server inside
using
 FormComponent.getConvertedInput. So far so good.

 The problem I have is that I'd like to actually 'return' a value
back
 from the server in that Javascript function... so my function ends
up
 looking just like a normal function call inside of my Javascript and
 returns the value that the server provides.

 I can see inside of wicket-ajax.js that there are three special
tags:
 component, evaluate and header-contribution, each with their
 appropriate purpose -- I tried messing around with
 AjaxRequestTarget.prependJavascript so I could pass something
through
 the 'evaluate' tag, but my javascript isn't sufficient to the
 task. Then
 I tried using AjaxRequestTarget.addComponent to modify another
 TextField
 and return the value through the DOM tree -- that works fine
 except for
 the fact that the order is wrong, so my method returns _before_ the
 component is updated.

 Then I noticed this interesting Wicket.Ajax.invokePostCallHandlers()
 call, which makes me wonder if 

Re: [Wicket-user] Using AJAX wicketSubmitFormById like a method call

2007-05-04 Thread James Renfro
Good point. What I'm planning on is to inject my own ResourceReference 
version with the async set to false, but only for the one page where I 
need it to be synchronous. Since I'm overriding 
onRenderHeadInitContribution, I can just choose not to call super and 
the default .js files won't get included. But it would be much cleaner 
to be able to just set it programmatically, so I'd be very happy to see 
that parameter get worked into a future release.

Unfortunately, the spec I'm trying to implement (SCORM) requires that I 
expose a bunch of javascript methods with synchronous behavior, 
otherwise I would definite go the success handler route in this case.

Thanks very much,
James.


Igor Vaynberg wrote:
 if you change wicket-ajax.js in the way you showed below then all ajax 
 requests will become synchronous. while you wont break anything 
 foundamental you will make parallel ajax requests impossible. not a 
 good thing imho. i guess we need to add a parameter so that you can 
 set the request to synchronous just for that one call.

 or do what i suggested and add a success handler that will execute the 
 rest of the function.

 -igor


 On 5/4/07, *James Renfro*  [EMAIL PROTECTED] 
 mailto:[EMAIL PROTECTED] wrote:

 So although clearly AJAX is supposed to be mostly asynchronous. it
 looks
 like the underlying XMLHttpRequest object _can_ be synchronous.

 If I modify wicket-ajax.js and set 'Wicket.Ajax.Request.async' to
 *false* -- suddenly my code works... i.e. I can code an
 AjaxFormSubmitBehavor.onSubmit so it takes a value from one
 FormComponent (the argument to the function), modifies it (in this
 case
 toUppercase), and sends it back to another FormComponent, whose node I
 can grab from the DOM tree and return inside my function.

 So I guess my question is -- am I going to break something fundamental
 by doing this? It seem to work fine in my test case.

 Javascript_function

 script type=text/javascript
 id=onTestMethod1!--/*--![CDATA[/*!--*/
 TestMethod1 = function () {
 var wcall=wicketSubmitFormById('form',
 
 '/portal/tool/52480496-d4f6-4278-0002-e65fdefcc0ef/?wicket:interface=wicket-247:0:form:-1:IUnversionedBehaviorListenerwicket:behaviorId=0wicket:ignoreIfNotActive=true',
 null, function() { }, function() { });
 return document.getElementById('form_result').value;;};
 /*--]]*//script

 /Javascript_function

 AjaxFormSubmitBehavior.onSubmit
 @Override
 protected void onSubmit(AjaxRequestTarget target) {
 FormComponent c = (FormComponent)form.get(argument);
 String testValue = (String)c.getConvertedInput();

 FormComponent r = (FormComponent)form.get(result);
 bean.setResult(testValue.toUpperCase());
 target.addComponent(r);
 }
 /AjaxFormSubmitBehavior.onSubmit

 wicket-ajax.js
 Wicket.Ajax.Request.prototype = {
 initialize: function(url, loadedCallback, parseResponse,
 randomURL,
 failureHandler, channel) {
 this.url = url;
 this.loadedCallback = loadedCallback;
 this.parseResponse = parseResponse != null ? parseResponse
 : true;
 this.randomURL = randomURL != null ? randomURL : true;
 this.failureHandler = failureHandler != null ?
 failureHandler :
 function() { };
 this.async = *true;*
 this.channel = channel;
 this.suppressDone = false;
 this.instance = Math.random();
 this.debugContent = true;
 },
 /wicket-ajax.js

 Thanks,
 James


 Igor Vaynberg wrote:
  the short answer is: you cant do that. javascript is
 asynchronous, so
  the request will start _and_ your function will continue running.
  usually what is done is that you create a request object, and then
  register success and failure handlers that are executed after the
  request is done.
 
  you can do that using iajaxcalldecorator, or what you
 tried...calling
  ajaxtarget.appendjavascript() should work as well.
 
  if you show us some more code/try to describe your actual
 usecase we
  can probably help you more, right now its all very abstract.
 
  -igor
 
 
  On 5/3/07, *James Renfro* [EMAIL PROTECTED]
 mailto:[EMAIL PROTECTED]
  mailto: [EMAIL PROTECTED] mailto:[EMAIL PROTECTED] wrote:
 
  Hi,
  I'd like to do something slightly unusual and wrap the
  wicketSubmitFormById call in another javascript function -- I'm
  able to
  do this with no problem by overriding
  AjaxFormSubmitBehavor.onRenderHeadInitContribution and calling
  JavascriptUtils.writeJavascript on a wrapped getEventHandler. I
  can stop
  the normal attribute for 'onclick' or 

Re: [Wicket-user] Using AJAX wicketSubmitFormById like a method call

2007-05-04 Thread Igor Vaynberg

feel free to add an rfe into our jira for the extra param.

-igor


On 5/4/07, James Renfro [EMAIL PROTECTED] wrote:


Good point. What I'm planning on is to inject my own ResourceReference
version with the async set to false, but only for the one page where I
need it to be synchronous. Since I'm overriding
onRenderHeadInitContribution, I can just choose not to call super and
the default .js files won't get included. But it would be much cleaner
to be able to just set it programmatically, so I'd be very happy to see
that parameter get worked into a future release.

Unfortunately, the spec I'm trying to implement (SCORM) requires that I
expose a bunch of javascript methods with synchronous behavior,
otherwise I would definite go the success handler route in this case.

Thanks very much,
James.


Igor Vaynberg wrote:
 if you change wicket-ajax.js in the way you showed below then all ajax
 requests will become synchronous. while you wont break anything
 foundamental you will make parallel ajax requests impossible. not a
 good thing imho. i guess we need to add a parameter so that you can
 set the request to synchronous just for that one call.

 or do what i suggested and add a success handler that will execute the
 rest of the function.

 -igor


 On 5/4/07, *James Renfro*  [EMAIL PROTECTED]
 mailto:[EMAIL PROTECTED] wrote:

 So although clearly AJAX is supposed to be mostly asynchronous. it
 looks
 like the underlying XMLHttpRequest object _can_ be synchronous.

 If I modify wicket-ajax.js and set 'Wicket.Ajax.Request.async' to
 *false* -- suddenly my code works... i.e. I can code an
 AjaxFormSubmitBehavor.onSubmit so it takes a value from one
 FormComponent (the argument to the function), modifies it (in this
 case
 toUppercase), and sends it back to another FormComponent, whose node
I
 can grab from the DOM tree and return inside my function.

 So I guess my question is -- am I going to break something
fundamental
 by doing this? It seem to work fine in my test case.

 Javascript_function

 script type=text/javascript
 id=onTestMethod1!--/*--![CDATA[/*!--*/
 TestMethod1 = function () {
 var wcall=wicketSubmitFormById('form',

'/portal/tool/52480496-d4f6-4278-0002-e65fdefcc0ef/?wicket:interface=wicket-247:0:form:-1:IUnversionedBehaviorListenerwicket:behaviorId=0wicket:ignoreIfNotActive=true',
 null, function() { }, function() { });
 return document.getElementById('form_result').value;;};
 /*--]]*//script

 /Javascript_function

 AjaxFormSubmitBehavior.onSubmit
 @Override
 protected void onSubmit(AjaxRequestTarget target) {
 FormComponent c =
(FormComponent)form.get(argument);
 String testValue = (String)c.getConvertedInput();

 FormComponent r = (FormComponent)form.get(result);
 bean.setResult(testValue.toUpperCase());
 target.addComponent(r);
 }
 /AjaxFormSubmitBehavior.onSubmit

 wicket-ajax.js
 Wicket.Ajax.Request.prototype = {
 initialize: function(url, loadedCallback, parseResponse,
 randomURL,
 failureHandler, channel) {
 this.url = url;
 this.loadedCallback = loadedCallback;
 this.parseResponse = parseResponse != null ? parseResponse
 : true;
 this.randomURL = randomURL != null ? randomURL : true;
 this.failureHandler = failureHandler != null ?
 failureHandler :
 function() { };
 this.async = *true;*
 this.channel = channel;
 this.suppressDone = false;
 this.instance = Math.random();
 this.debugContent = true;
 },
 /wicket-ajax.js

 Thanks,
 James


 Igor Vaynberg wrote:
  the short answer is: you cant do that. javascript is
 asynchronous, so
  the request will start _and_ your function will continue running.
  usually what is done is that you create a request object, and then
  register success and failure handlers that are executed after the
  request is done.
 
  you can do that using iajaxcalldecorator, or what you
 tried...calling
  ajaxtarget.appendjavascript() should work as well.
 
  if you show us some more code/try to describe your actual
 usecase we
  can probably help you more, right now its all very abstract.
 
  -igor
 
 
  On 5/3/07, *James Renfro* [EMAIL PROTECTED]
 mailto:[EMAIL PROTECTED]
  mailto: [EMAIL PROTECTED] mailto:[EMAIL PROTECTED]
wrote:
 
  Hi,
  I'd like to do something slightly unusual and wrap the
  wicketSubmitFormById call in another javascript function --
I'm
  able to
  do this with no problem by overriding
  AjaxFormSubmitBehavor.onRenderHeadInitContribution and calling
  JavascriptUtils.writeJavascript on a 

Re: [Wicket-user] Using AJAX wicketSubmitFormById like a method call

2007-05-03 Thread Igor Vaynberg

the short answer is: you cant do that. javascript is asynchronous, so the
request will start _and_ your function will continue running. usually what
is done is that you create a request object, and then register success and
failure handlers that are executed after the request is done.

you can do that using iajaxcalldecorator, or what you tried...calling
ajaxtarget.appendjavascript() should work as well.

if you show us some more code/try to describe your actual usecase we can
probably help you more, right now its all very abstract.

-igor


On 5/3/07, James Renfro [EMAIL PROTECTED] wrote:


Hi,
I'd like to do something slightly unusual and wrap the
wicketSubmitFormById call in another javascript function -- I'm able to
do this with no problem by overriding
AjaxFormSubmitBehavor.onRenderHeadInitContribution and calling
JavascriptUtils.writeJavascript on a wrapped getEventHandler. I can stop
the normal attribute for 'onclick' or whatever from appearing inside the
component tag by overriding onComponentTag. And by using text input
boxes, I can pass 'arguments' to my method on the server inside using
FormComponent.getConvertedInput. So far so good.

The problem I have is that I'd like to actually 'return' a value back
from the server in that Javascript function... so my function ends up
looking just like a normal function call inside of my Javascript and
returns the value that the server provides.

I can see inside of wicket-ajax.js that there are three special tags:
component, evaluate and header-contribution, each with their
appropriate purpose -- I tried messing around with
AjaxRequestTarget.prependJavascript so I could pass something through
the 'evaluate' tag, but my javascript isn't sufficient to the task. Then
I tried using AjaxRequestTarget.addComponent to modify another TextField
and return the value through the DOM tree -- that works fine except for
the fact that the order is wrong, so my method returns _before_ the
component is updated.

Then I noticed this interesting Wicket.Ajax.invokePostCallHandlers()
call, which makes me wonder if there is already some nice clean
mechanism in place for updating javascript variables thru wicket's java
code.

Apologies if this all makes no sense, but any advice or suggestions
would be much appreciated. The basic requirement is just that I make a
call in Javascript and get data back from the server as a 'returned'
variable on the client.

Thanks,
James

--
James Renfro
Programmer
IET Mediaworks, UC Davis
[EMAIL PROTECTED]
W: 530-754-5097


-
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

-
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/___
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user