I just asked on the developer list http://www.nabble.com/replacement-for-date-picker-tf3162478.html
Eelco On 2/2/07, Scott Swank <[EMAIL PROTECTED]> wrote: > Nice, thank you. Where does the process to replace DatePicker stand? > > > On 2/2/07, Eelco Hillenius <[EMAIL PROTECTED] > wrote: > > The date converter is being phased out because it is messy in many > > ways (and the java.util.Date API is partly to blame for that!). I > > think you would do best just copying the whole component to your own > > project and then tweaking it in getInitiScript and by depending on > > your own date converter for getting the proper patterns. > > > > Btw, if you are working with different locales, the client's time zone > > is something you might want to consider as well. Here is something > > that does that and which depends on JodaTime > > > > > > import java.util.Date ; > > import java.util.TimeZone; > > > > import org.joda.time.DateTime; > > import org.joda.time.DateTimeZone; > > import org.joda.time.MutableDateTime; > > import org.joda.time.format.DateTimeFormat; > > import org.joda.time.format.DateTimeFormatter ; > > > > import wicket.Session; > > import wicket.protocol.http.request.WebClientInfo; > > import wicket.request.ClientInfo; > > import wicket.util.convert.SimpleConverterAdapter; > > > > /** > > * Date converter that can be smart about differences in time zone between > > * clients and server. NOT thread safe. > > * > > * @author eelcohillenius > > */ > > public class DateConverter extends SimpleConverterAdapter { > > > > /** > > * Whether to apply the time zone difference when interpreting > dates. > > * > > * </p> > > * When true, the current time is applied on the parsed date, and > the date > > * will be corrected for the time zone difference between the > server and the > > * client. For instance, if I'm in Seattle and the server I'm > working on is > > * in Amsterdam, the server is 9 hours ahead. So, if I'm inputting > say 12/24 > > * at a couple of hours before midnight, at the server it is > already 12/25. > > * If this boolean is true, it will be transformed to 12/25, while > the > > * client sees 12/24. > > * </p> > > * <p> > > * True by default > > * </p> > > */ > > private boolean applyTimeZoneDifference = true; > > > > /** optional pattern to use. */ > > private String datePattern; > > > > /** > > * Construct. > > */ > > public DateConverter() { > > } > > > > /** > > * Gets whether to apply the time zone difference when > interpreting dates. > > * > > * </p> > > * When true, the current time is applied on the parsed date, and > the date > > * will be corrected for the time zone difference between the > server and the > > * client. For instance, if I'm in Seattle and the server I'm > working on is > > * in Amsterdam, the server is 9 hours ahead. So, if I'm inputting > say 12/24 > > * at a couple of hours before midnight, at the server it is > already 12/25. > > * If this boolean is true, it will be transformed to 12/25, while > the > > * client sees 12/24. > > * </p> > > * > > * @return whether to apply the difference in time zones between > client and > > * server > > */ > > public final boolean getApplyTimeZoneDifference() { > > return applyTimeZoneDifference; > > } > > > > /** > > * Gets the optional date pattern. > > * > > * @return datePattern > > */ > > public String getDatePattern() { > > return datePattern; > > } > > > > /** > > * Sets whether to apply the time zone difference when > interpreting dates. > > * > > * </p> > > * When true, the current time is applied on the parsed date, and > the date > > * will be corrected for the time zone difference between the > server and the > > * client. For instance, if I'm in Seattle and the server I'm > working on is > > * in Amsterdam, the server is 9 hours ahead. So, if I'm inputting > say 12/24 > > * at a couple of hours before midnight, at the server it is > already 12/25. > > * If this boolean is true, it will be transformed to 12/25, while > the > > * client sees 12/24. > > * </p> > > * > > * @param applyTimeZoneDifference > > * whether to apply the difference in time zones > between client > > * and server > > */ > > public final void > setApplyTimeZoneDifference(boolean applyTimeZoneDifference) > { > > this.applyTimeZoneDifference = applyTimeZoneDifference; > > } > > > > /** > > * Sets the optional date pattern. > > * > > * @param datePattern > > * datePattern > > */ > > public void setDatePattern(String datePattern) { > > this.datePattern = datePattern; > > } > > > > @Override > > public Object toObject(String value) { > > > > DateTimeFormatter format = getFormat(); > > > > if (applyTimeZoneDifference) { > > TimeZone zone = > getClientTimeZone(); > > // instantiate now/ current time > > MutableDateTime dt = new > MutableDateTime(); > > if (zone != null) { > > // set time zone for > client > > format = > format.withZone(DateTimeZone.forTimeZone(zone)); > > > dt.setZone(DateTimeZone.forTimeZone(zone)); > > } > > // parse date retaining the time of the submission > > format.parseInto(dt, value, 0); > > // apply the server time zone to the parsed value > > > dt.setZone(DateTimeZone.forTimeZone(TimeZone.getDefault())); > > return dt.toDate(); > > } else { > > return format.parseDateTime(value).toDate(); > > } > > } > > > > @Override > > public String toString(Object value) { > > > > DateTime dt = new DateTime(((Date) value).getTime()); > > DateTimeFormatter format = getFormat(); > > > > if (applyTimeZoneDifference) { > > TimeZone zone = > getClientTimeZone(); > > if (zone != null) { > > // apply time zone to > formatter > > format = > format.withZone(DateTimeZone.forTimeZone(zone)); > > } > > } > > return format.print(dt); > > } > > > > /** > > * Gets the client's time zone. > > * > > * @return The client's time zone or null > > */ > > private TimeZone getClientTimeZone() { > > ClientInfo info = Session.get().getClientInfo(); > > if (info instanceof WebClientInfo) { > > return ((WebClientInfo) > info).getProperties().getTimeZone(); > > } > > return null; > > } > > > > /** > > * @return formatter > > */ > > private DateTimeFormatter getFormat() { > > if (datePattern != null) { > > return DateTimeFormat.forPattern(datePattern); > > } else { > > return > DateTimeFormat.shortDate().withLocale(Session.get().getLocale()); > > } > > } > > } > > > > import java.util.Date; > > > > import wicket.markup.ComponentTag; > > import wicket.markup.html.form.TextField; > > import wicket.model.IModel; > > import wicket.util.convert.IConverter; > > > > /** > > * A TextField that is mapped to a <code>java.util.Date</code> object and > that > > * uses Joda time to parse and format values. > > * <p> > > * You can provide a date pattern in two of the constructors. When not > provided, > > * [EMAIL PROTECTED] DateTimeFormat#shortDate()} will be used. > > * </p> > > * <p> > > * A special option is applyTimeZoneDifference which is an option that says > > * whether to correct for the difference between the client's time zone and > > * server's time zone. This is true by default. > > * </p> > > * > > * @see DateTime > > * @see DateTimeFormat > > * @see DateTimeZone > > * > > * @author eelcohillenius > > */ > > public class DateTextField extends TextField { > > > > private static final long serialVersionUID = 1L; > > > > /** > > * The converter for the TextField > > */ > > private DateConverter converter = new DateConverter(); > > > > /** > > * Creates a new DateTextField, without a specified pattern. This > is the > > * same as calling <code>new TextField(id, Date.class)</code> > > * > > * @param id > > * The id of the text field > > * > > * @see wicket.markup.html.form.TextField > > */ > > public DateTextField(String id) { > > super(id, Date.class); > > } > > > > /** > > * Creates a new DateTextField, without a specified pattern. This > is the > > * same as calling <code>new TextField(id, object, > Date.class)</code> > > * > > * @param id > > * The id of the text field > > * @param object > > * The model > > * > > * @see wicket.markup.html.form.TextField > > */ > > public DateTextField(String id, IModel object) { > > super(id, object, Date.class); > > } > > > > /** > > * Creates a new DateTextField bound with a specific > > * [EMAIL PROTECTED] org.joda.time.format.DateTimeFormatter} > pattern. > > * > > * @param id > > * The id of the text field > > * @param object > > * The model > > * @param datePattern > > * A [EMAIL PROTECTED] > org.joda.time.format.DateTimeFormatter} pattern > > * > > * @see wicket.markup.html.form.TextField > > */ > > public DateTextField(String id, IModel object, String datePattern) > { > > super(id, object, Date.class); > > converter.setDatePattern(datePattern); > > } > > > > /** > > * Creates a new DateTextField bound with a specific > > * [EMAIL PROTECTED] org.joda.time.format.DateTimeFormatter} > pattern. > > * > > * @param id > > * The id of the text field > > * @param datePattern > > * A [EMAIL PROTECTED] > org.joda.time.format.DateTimeFormatter} pattern > > * > > * @see wicket.markup.html.form.TextField > > */ > > public DateTextField(String id, String datePattern) { > > super(id, Date.class); > > converter.setDatePattern(datePattern); > > } > > > > /** > > * Gets whether to apply the time zone difference when > interpreting dates. > > * > > * </p> > > * When true, the current time is applied on the parsed date, and > the date > > * will be corrected for the time zone difference between the > server and the > > * client. For instance, if I'm in Seattle and the server I'm > working on is > > * in Amsterdam, the server is 9 hours ahead. So, if I'm inputting > say 12/24 > > * at a couple of hours before midnight, at the server it is > already 12/25. > > * If this boolean is true, it will be transformed to 12/25, while > the > > * client sees 12/24. > > * </p> > > * > > * @return whether to apply the difference in time zones between > client and > > * server > > */ > > public boolean getApplyTimeZoneDifference() { > > return > converter.getApplyTimeZoneDifference(); > > } > > > > /** > > * Returns the specialized converter. > > */ > > @Override > > public IConverter getConverter() { > > return converter; > > } > > > > /** > > * Sets whether to apply the time zone difference when > interpreting dates. > > * > > * </p> > > * When true, the current time is applied on the parsed date, and > the date > > * will be corrected for the time zone difference between the > server and the > > * client. For instance, if I'm in Seattle and the server I'm > working on is > > * in Amsterdam, the server is 9 hours ahead. So, if I'm inputting > say 12/24 > > * at a couple of hours before midnight, at the server it is > already 12/25. > > * If this boolean is true, it will be transformed to 12/25, while > the > > * client sees 12/24. > > * </p> > > * > > * @param applyTimeZoneDifference > > * whether to apply the difference in time zones > between client > > * and server > > */ > > public void setApplyTimeZoneDifference(boolean > applyTimeZoneDifference) { > > > converter.setApplyTimeZoneDifference(applyTimeZoneDifference); > > } > > > > @Override > > protected void onComponentTag(ComponentTag tag) { > > super.onComponentTag (tag); > > tag.put("onfocus", "this.select();"); > > } > > } > > > > > > If you plan to use this, you surely should patch DatePicker. > > > > The time difference isn't as obvious when you work with dates, but you > > can have weird differences. If you work with times, it is more > > obvious. As a bonus, here is code to let you work with times: > > > > import java.util.Arrays; > > import java.util.Date; > > import java.util.TimeZone; > > > > import org.joda.time.DateTimeFieldType; > > import org.joda.time.DateTimeZone; > > import org.joda.time.MutableDateTime; > > > > import > ts4.web.wicket.component.datepicker.settings.DatePickerSettings; > > import wicket.Session ; > > import > wicket.extensions.markup.html.datepicker.DatePicker; > > import wicket.markup.html.form.DropDownChoice; > > import wicket.markup.html.form.FormComponentPanel; > > import wicket.markup.html.form.TextField; > > import > wicket.markup.html.form.validation.NumberValidator; > > import wicket.model.IModel; > > import wicket.model.PropertyModel; > > import wicket.protocol.http.request.WebClientInfo; > > import wicket.request.ClientInfo; > > > > /** > > * Works on a [EMAIL PROTECTED] java.util.Date} object. Displays a date > > field and a > date > > * picker, a field for hours and a field for minutes, and a AM/ PM field. > > * > > * @author eelcohillenius > > * @see DateField for a variant with just the date field and date picker > > */ > > public class DateTimeField extends FormComponentPanel { > > > > private static enum AM_PM { > > AM, PM > > } > > > > private AM_PM amOrPm = AM_PM.AM; > > > > private DropDownChoice amOrPmChoice; > > > > /** > > * Whether to apply the time zone difference when interpreting > dates. > > * > > * </p> > > * When true, the current time is applied on the parsed date, and > the date > > * will be corrected for the time zone difference between the > server and the > > * client. For instance, if I'm in Seattle and the server I'm > working on is > > * in Amsterdam, the server is 9 hours ahead. So, if I'm inputting > say 12/24 > > * at a couple of hours before midnight, at the server it is > already 12/25. > > * If this boolean is true, it will be transformed to 12/25, while > the > > * client sees 12/24. > > * </p> > > * <p> > > * True by default > > * </p> > > */ > > private boolean applyTimeZoneDifference = true; > > > > private MutableDateTime date; > > > > private DateTextField dateField; > > > > private Integer hours; > > > > private TextField hoursField; > > > > private Integer minutes; > > > > private TextField minutesField; > > > > /** > > * Construct. > > * > > * @param id > > */ > > public DateTimeField(String id) { > > super(id); > > init(); > > } > > > > /** > > * Construct. > > * > > * @param id > > * @param model > > */ > > public DateTimeField(String id, IModel model) { > > super(id, model); > > init(); > > } > > > > /** > > * Gets amOrPm. > > * > > * @return amOrPm > > */ > > public AM_PM getAmOrPm() { > > return amOrPm; > > } > > > > /** > > * Gets whether to apply the time zone difference when > interpreting dates. > > * > > * </p> > > * When true, the current time is applied on the parsed date, and > the date > > * will be corrected for the time zone difference between the > server and the > > * client. For instance, if I'm in Seattle and the server I'm > working on is > > * in Amsterdam, the server is 9 hours ahead. So, if I'm inputting > say 12/24 > > * at a couple of hours before midnight, at the server it is > already 12/25. > > * If this boolean is true, it will be transformed to 12/25, while > the > > * client sees 12/24. > > * </p> > > * > > * @return whether to apply the difference in time zones between > client and > > * server > > */ > > public final boolean getApplyTimeZoneDifference() { > > return applyTimeZoneDifference; > > } > > > > /** > > * Gets date. > > * > > * @return date > > */ > > public Date getDate() { > > return (date != null) ? date.toDate() : null; > > } > > > > /** > > * Gets hours. > > * > > * @return hours > > */ > > public Integer getHours() { > > return hours; > > } > > > > /** > > * Gets minutes. > > * > > * @return minutes > > */ > > public Integer getMinutes() { > > return minutes; > > } > > > > /** > > * Sets amOrPm. > > * > > * @param amOrPm > > * amOrPm > > */ > > public void setAmOrPm(AM_PM amOrPm) { > > this.amOrPm = amOrPm; > > } > > > > /** > > * Sets whether to apply the time zone difference when > interpreting dates. > > * > > * </p> > > * When true, the current time is applied on the parsed date, and > the date > > * will be corrected for the time zone difference between the > server and the > > * client. For instance, if I'm in Seattle and the server I'm > working on is > > * in Amsterdam, the server is 9 hours ahead. So, if I'm inputting > say 12/24 > > * at a couple of hours before midnight, at the server it is > already 12/25. > > * If this boolean is true, it will be transformed to 12/25, while > the > > * client sees 12/24. > > * </p> > > * > > * @param applyTimeZoneDifference > > * whether to apply the difference in time zones > between client > > * and server > > */ > > public final void > setApplyTimeZoneDifference(boolean applyTimeZoneDifference) > { > > this.applyTimeZoneDifference = applyTimeZoneDifference; > > dateField.setApplyTimeZoneDifference > (applyTimeZoneDifference); > > } > > > > /** > > * Sets date. > > * > > * @param date > > * date > > */ > > public void setDate(Date date) { > > this.date = (date != null) ? new MutableDateTime(date) : > null; > > } > > > > /** > > * Sets hours. > > * > > * @param hours > > * hours > > */ > > public void setHours(Integer hours) { > > this.hours = hours; > > } > > > > /** > > * Sets minutes. > > * > > * @param minutes > > * minutes > > */ > > public void setMinutes(Integer minutes) { > > this.minutes = minutes; > > } > > > > @Override > > public void updateModel() { > > > > dateField.updateModel(); > > hoursField.updateModel(); > > minutesField.updateModel(); > > amOrPmChoice.updateModel(); > > > > if (date != null) { > > > > try { > > if > (applyTimeZoneDifference) { > > TimeZone zone = > getClientTimeZone(); > > if (zone != null) > { > > > date.setZone(DateTimeZone.forTimeZone (zone)); > > } > > } > > > > if (hours != null) { > > > date.set(DateTimeFieldType.hourOfHalfday (), hours); > > > date.setMinuteOfHour((minutes != null) ? minutes : 0); > > } > > if (amOrPm == AM_PM.PM) { > > > date.set(DateTimeFieldType.halfdayOfDay(), 1); > > } else { > > > date.set(DateTimeFieldType.halfdayOfDay(), 0); > > } > > } catch (RuntimeException e) { > > > DateTimeField.this.error(e.getMessage()); > > invalid(); > > } > > > > // the date will be in the server's timezone > > Date d = date.toDate(); > > setModelObject(d); > > } else { > > setModelObject(null); > > } > > } > > > > protected DatePickerSettings newDatePickerSettings() { > > return new DatePickerSettings(); > > } > > > > @Override > > protected void onAttach() { > > > > Date d = (Date) getModelObject(); > > if (d != null) { > > date = new MutableDateTime(d); > > } else { > > date = null; > > } > > > > if (date != null) { > > > > if (applyTimeZoneDifference) { > > // convert date to the > client's time zone if we have that info > > TimeZone zone = > getClientTimeZone(); > > // instantiate with the > previously set date > > if (zone != null) { > > > date.setZone(DateTimeZone.forTimeZone(zone)); > > } > > } > > > > hours = > date.get(DateTimeFieldType.hourOfHalfday()); > > minutes = date.getMinuteOfHour(); > > amOrPm = > (date.get(DateTimeFieldType.halfdayOfDay()) == 0) ? > > AM_PM.AM : AM_PM.PM; > > > > // we don't really have to reset the date field to > the server's > > // timezone, as it's the same milis from EPOCH > anyway, and toDate > > // will always get the Date object initialized for > the time zone > > // of the server > > } > > > > super.onAttach(); > > } > > > > /** > > * Gets the client's time zone. > > * > > * @return The client's time zone or null > > */ > > private TimeZone getClientTimeZone() { > > ClientInfo info = Session.get().getClientInfo(); > > if (info instanceof WebClientInfo) { > > return ((WebClientInfo) > info).getProperties().getTimeZone(); > > } > > return null; > > } > > > > private void init() { > > > > setType(Date.class); > > add(dateField = new DateTextField("date", new > PropertyModel(this, "date"))); > > add(new DatePicker("picker", dateField, > newDatePickerSettings())); > > add(hoursField = new TextField("hours", new > PropertyModel(this, > > "hours"), Integer.class )); > > hoursField.add(NumberValidator.range(0, 12)); > > add(minutesField = new > TextField("minutes", new PropertyModel(this, > > "minutes"), Integer.class)); > > minutesField.add(NumberValidator.range(0, 60)); > > add(amOrPmChoice = new > DropDownChoice("amOrPmChoice", new > > PropertyModel(this, "amOrPm"), Arrays.asList(AM_PM > > .values()))); > > } > > } > > > > <wicket:panel> > > <span style="white-space: nowrap;"> > > <input type="text" wicket:id="date" size="8" /> > > <span wicket:id="picker" /> > > <input type="text" wicket:id="hours" size="2" /> : > > <input type="text" wicket:id="minutes" size="2" /> > > <select wicket:id="amOrPmChoice"></select> > > </span> > > </wicket:panel> > > > > > > On 2/2/07, Scott Swank <[EMAIL PROTECTED]> wrote: > > > The text field has yy, while the date picker puts yyyy into the date -- > > > whether it's MM/dd/yyyy or dd/MM/yyyy (due to i18n). Then we get an > > > annoying npe rendering the feedback panel -- which I still haven't > tracked > > > down. > > > > > > popup contains panel > > > panel contains form > > > form contains fields with validation > > > form contains date pickers that are tied to two of the fields > > > form also has form-level validation > > > form also contains feedback panel with form component feedback borders > > > around date fields > > > form applies > > > > AjaxFormValidatingBehavior.addToAllFormComponents("onblur") > > > > > > When the date picker pushes an invalid date (check-in date before today > or > > > check-out date on/before check-in date) null pointers just roll in > rendering > > > the feedback panel. I'm working to isolate this to a simpler case... > > > > > > Scott > > > > > > > > > > > > On 2/2/07, Eelco Hillenius < [EMAIL PROTECTED]> wrote: > > > > The date picker component already tries to sync with the text field > > > > you provide as the target. Did you try this? > > > > > > > > Eelco > > > > > > > > > > > > On 2/1/07, Scott Swank <[EMAIL PROTECTED] > wrote: > > > > > I just (a bit too optimistically) tried to get the converter from my > > > > > TextField and use it to set the DateConverter for the corresponding > > > > > DatePicker. I definitely want to retain the i18n (mm/dd/yyyy for > > > ENGLISH > > > > > and dd/mm/yyyy for FRENCH). Is there a straightforward way to synch > up > > > the > > > > > DateConverters for a TextField and DatePicker while retaining > > > > > internationalization? > > > > > > > > > > RequiredTextField checkIn = new RequiredTextField("checkIn", > new > > > > > PropertyModel(roomRequest, > > > > > "checkIn"), Date.class); > > > > > checkIn.setOutputMarkupId(true); > > > > > checkIn.add(DateValidator.minimum (getToday())); > > > > > add(checkIn); > > > > > > > > > > DatePicker dp = new > > > > > CylleniusCalendar("checkInPicker", checkIn); > > > > > dp.setOutputMarkupId (true); > > > > > dp.setDateConverter ((DateConverter) checkIn.getConverter > ()); > > > > > add(dp); > > > > > > > > > > java.lang.ClassCastException: wicket.util.convert.Converter > > > > > at > > > > > > > > > com.vegas.cart.wicket.components.RoomRequestForm.<init>(RoomRequestForm.java > > > > > :69) > > > > > > > > > > Thank you, > > > > > Scott > > > > > > > > > ------------------------------------------------------------------------- > > > > > Using Tomcat but need to do more? Need to support web services, > > > security? > > > > > Get stuff done quickly with pre-integrated technology to make your > job > > > > > easier. > > > > > Download IBM WebSphere Application Server v.1.0.1 based on Apache > > > Geronimo > > > > > > > > > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > > > > > _______________________________________________ > > > > > Wicket-user mailing list > > > > > Wicket-user@lists.sourceforge.net > > > > > > > > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------------------------- > > > > Using Tomcat but need to do more? Need to support web services, > security? > > > > Get stuff done quickly with pre-integrated technology to make your job > > > easier. > > > > Download IBM WebSphere Application Server v.1.0.1 based on Apache > Geronimo > > > > > > > > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > > > > _______________________________________________ > > > > Wicket-user mailing list > > > > Wicket-user@lists.sourceforge.net > > > > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > > > > > > > > > -- > > > Scott Swank > > > reformed mathematician > > > > ------------------------------------------------------------------------- > > > Using Tomcat but need to do more? Need to support web services, > security? > > > Get stuff done quickly with pre-integrated technology to make your job > > > easier. > > > Download IBM WebSphere Application Server v.1.0.1 based on Apache > Geronimo > > > > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > > > > > > _______________________________________________ > > > Wicket-user mailing list > > > Wicket-user@lists.sourceforge.net > > > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > > > > > > > ------------------------------------------------------------------------- > > Using Tomcat but need to do more? Need to support web services, security? > > Get stuff done quickly with pre-integrated technology to make your job > easier. > > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > > > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > > _______________________________________________ > > Wicket-user mailing list > > Wicket-user@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > -- > Scott Swank > reformed mathematician > ------------------------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job > easier. > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > Wicket-user mailing list > Wicket-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/wicket-user > > ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier. Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user