You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2018/08/06 21:19:53 UTC
wicket git commit: WICKET-6576 parse pattern
Repository: wicket
Updated Branches:
refs/heads/wicket-8.x 2647daba6 -> 778fcef98
WICKET-6576 parse pattern
support different from format pattern
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/778fcef9
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/778fcef9
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/778fcef9
Branch: refs/heads/wicket-8.x
Commit: 778fcef9848057d9a7e9281b26fd8f24a03fe323
Parents: 2647dab
Author: Sven Meier <sv...@apache.org>
Authored: Mon Aug 6 23:12:42 2018 +0200
Committer: Sven Meier <sv...@apache.org>
Committed: Mon Aug 6 23:19:24 2018 +0200
----------------------------------------------------------------------
.../wicket/examples/datetime/DateTimePage.html | 6 ++
.../wicket/examples/datetime/DateTimePage.java | 12 ++-
.../html/form/datetime/LocalDateTextField.java | 91 ++++++++++++++------
.../form/datetime/LocalDateTextFieldTest.java | 26 ++++--
4 files changed, 100 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/778fcef9/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.html
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.html b/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.html
index 7778689..19b021a 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.html
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.html
@@ -27,6 +27,12 @@
<hr/>
+ <h3>LocalDateTextField formatting with dd-MM-yyyy and parsing with d-M-yyyy</h3>
+ <input wicket:id="date" type="text" />
+ <br/>
+
+ <hr/>
+
<h3>LocalDateTimeField (default time 00:00)</h3>
<span wicket:id="datetime0"></span><br/>
http://git-wip-us.apache.org/repos/asf/wicket/blob/778fcef9/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.java
index de0f8ea..3548c09 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/datetime/DateTimePage.java
@@ -16,6 +16,7 @@
*/
package org.apache.wicket.examples.datetime;
+import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
@@ -30,6 +31,7 @@ import java.util.stream.Collectors;
import org.apache.wicket.Session;
import org.apache.wicket.examples.WicketExamplePage;
import org.apache.wicket.examples.forminput.FormInputApplication;
+import org.apache.wicket.extensions.markup.html.form.datetime.LocalDateTextField;
import org.apache.wicket.extensions.markup.html.form.datetime.LocalDateTimeField;
import org.apache.wicket.extensions.markup.html.form.datetime.LocalDateTimeTextField;
import org.apache.wicket.extensions.markup.html.form.datetime.TimeField;
@@ -68,6 +70,9 @@ public class DateTimePage extends WicketExamplePage
private LocalTime time2 = LocalTime.of(22, 15);
@SuppressWarnings("unused")
+ private LocalDate date = LocalDate.now();
+
+ @SuppressWarnings("unused")
private LocalDateTime dateTime0 = LocalDateTime.now();
@SuppressWarnings("unused")
@@ -126,6 +131,9 @@ public class DateTimePage extends WicketExamplePage
}
});
+ final LocalDateTextField dateField = new LocalDateTextField("date", new PropertyModel<>(this, "date"), "dd-MM-yyyy", "d-M-yyyy");
+ form.add(dateField);
+
final LocalDateTimeField datetimeField0 = new LocalDateTimeField("datetime0",
new PropertyModel<>(this, "dateTime0"))
{
@@ -161,7 +169,7 @@ public class DateTimePage extends WicketExamplePage
form.add(new Label("datetime1-label", zonedDateTime1));
IModel<ZonedDateTime> zonedDateTime2 = new PropertyModel<>(this, "dateTime2");
- LocalDateTimeTextField datetime2 = new LocalDateTimeTextField("datetime2",
+ LocalDateTimeTextField datetimeField2 = new LocalDateTimeTextField("datetime2",
new ZonedToLocalDateTimeModel(zonedDateTime2)
{
private static final long serialVersionUID = 1L;
@@ -178,7 +186,7 @@ public class DateTimePage extends WicketExamplePage
return targetZone;
}
}, FormatStyle.SHORT, FormatStyle.SHORT);
- form.add(datetime2);
+ form.add(datetimeField2);
form.add(new Label("datetime2-label", zonedDateTime2));
final ZonedDateTimeField datetimeField3 = new ZonedDateTimeField("datetime3",
http://git-wip-us.apache.org/repos/asf/wicket/blob/778fcef9/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextField.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextField.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextField.java
index 68d46de..a26f2b1 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextField.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextField.java
@@ -20,7 +20,9 @@ import java.time.LocalDate;
import java.time.chrono.IsoChronology;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
+import java.time.format.DateTimeParseException;
import java.time.format.FormatStyle;
+import java.time.temporal.TemporalAccessor;
import java.util.Locale;
import org.apache.wicket.markup.html.form.AbstractTextComponent.ITextFormatProvider;
@@ -28,6 +30,7 @@ import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.IModel;
import org.apache.wicket.util.convert.IConverter;
import org.apache.wicket.util.convert.converter.LocalDateConverter;
+import org.apache.wicket.util.string.Strings;
/**
* A TextField that is mapped to a <code>java.time.LocalDate</code> object and that uses java.time time to
@@ -51,12 +54,42 @@ public class LocalDateTextField extends TextField<LocalDate> implements ITextFor
*
* @param id
* the component id
+ * @param pattern
+ * the pattern to use
+ */
+ public LocalDateTextField(String id, String pattern)
+ {
+ this(id, null, pattern);
+ }
+
+ /**
+ * Construct with a pattern.
+ *
+ * @param id
+ * the component id
* @param model
* the model
* @param pattern
* the pattern to use
*/
- public LocalDateTextField(String id, IModel<LocalDate> model, String datePattern)
+ public LocalDateTextField(String id, IModel<LocalDate> model, String pattern)
+ {
+ this(id, model, pattern, pattern);
+ }
+
+ /**
+ * Construct with pattern for formatting and parsing.
+ *
+ * @param id
+ * the component id
+ * @param model
+ * the model
+ * @param formatPattern
+ * the pattern to use for formatting
+ * @param parsePattern
+ * the pattern to use for parsing
+ */
+ public LocalDateTextField(String id, IModel<LocalDate> model, String formatPattern, String parsePattern)
{
super(id, model, LocalDate.class);
@@ -64,30 +97,52 @@ public class LocalDateTextField extends TextField<LocalDate> implements ITextFor
private static final long serialVersionUID = 1L;
@Override
- public DateTimeFormatter getDateTimeFormatter(Locale locale)
+ protected DateTimeFormatter getDateTimeFormatter()
{
- return DateTimeFormatter.ofPattern(datePattern).withLocale(locale);
+ return DateTimeFormatter.ofPattern(formatPattern);
+ }
+
+ /**
+ * Overwritten to support a custom parse pattern.
+ */
+ @Override
+ public LocalDate convertToObject(final String value, Locale locale)
+ {
+ if (Strings.isEmpty(value))
+ {
+ return null;
+ }
+
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(parsePattern).withLocale(locale);
+ TemporalAccessor temporalAccessor;
+ try {
+ temporalAccessor = dateTimeFormatter.parse(value);
+ } catch (DateTimeParseException ex) {
+ throw newConversionException("Cannot parse '" + value, value, locale);
+ }
+
+ return createTemporal(temporalAccessor);
}
@Override
public String getTextFormat(Locale locale)
{
- return datePattern;
+ return formatPattern;
}
};
}
/**
- * Construct with a pattern.
+ * Construct with a style.
*
* @param id
* the component id
- * @param pattern
- * the pattern to use
+ * @param dateStyle
+ * the style to use
*/
- public LocalDateTextField(String id, String datePattern)
+ public LocalDateTextField(String id, FormatStyle dateStyle)
{
- this(id, null, datePattern);
+ this(id, null, dateStyle);
}
/**
@@ -108,9 +163,9 @@ public class LocalDateTextField extends TextField<LocalDate> implements ITextFor
private static final long serialVersionUID = 1L;
@Override
- public DateTimeFormatter getDateTimeFormatter(Locale locale)
+ protected DateTimeFormatter getDateTimeFormatter()
{
- return DateTimeFormatter.ofLocalizedDate(dateStyle).withLocale(locale);
+ return DateTimeFormatter.ofLocalizedDate(dateStyle);
}
@Override
@@ -121,20 +176,6 @@ public class LocalDateTextField extends TextField<LocalDate> implements ITextFor
};
}
-
- /**
- * Construct with a style.
- *
- * @param id
- * the component id
- * @param dateStyle
- * the style to use
- */
- public LocalDateTextField(String id, FormatStyle dateStyle)
- {
- this(id, null, dateStyle);
- }
-
/**
* @return The specialized converter.
* @see org.apache.wicket.Component#createConverter(java.lang.Class)
http://git-wip-us.apache.org/repos/asf/wicket/blob/778fcef9/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextFieldTest.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextFieldTest.java b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextFieldTest.java
index 1d50158..0026e7f 100644
--- a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextFieldTest.java
+++ b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/datetime/LocalDateTextFieldTest.java
@@ -17,15 +17,12 @@
package org.apache.wicket.extensions.markup.html.form.datetime;
import java.time.LocalDate;
-import java.time.format.FormatStyle;
-import java.util.Locale;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.markup.IMarkupResourceStreamProvider;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.Model;
-import org.apache.wicket.util.convert.converter.LocalDateConverter;
import org.apache.wicket.util.resource.IResourceStream;
import org.apache.wicket.util.resource.StringResourceStream;
import org.apache.wicket.util.tester.FormTester;
@@ -52,12 +49,25 @@ public class LocalDateTextFieldTest extends WicketTestCase
@Test
public void dateNotNullTest()
{
- LocalDate date = LocalDate.of(2017, 02, 13);
+ LocalDate date = LocalDate.of(2017, 02, 03);
TestPage page = new TestPage(null);
tester.startPage(page);
FormTester formTester = tester.newFormTester("form", false);
- formTester.setValue("field",
- new LocalDateConverter().convertToString(date, Locale.forLanguageTag("en-US")));
+ formTester.setValue("field", "03-02-2017");
+ formTester.submit();
+ tester.assertNoErrorMessage();
+ LocalDate d = page.field.getModelObject();
+ assertEquals(date, d);
+ }
+
+ @Test
+ public void dateParsePatternTest()
+ {
+ LocalDate date = LocalDate.of(2017, 02, 03);
+ TestPage page = new TestPage(null);
+ tester.startPage(page);
+ FormTester formTester = tester.newFormTester("form", false);
+ formTester.setValue("field", "3-2-2017");
formTester.submit();
tester.assertNoErrorMessage();
LocalDate d = page.field.getModelObject();
@@ -75,9 +85,9 @@ public class LocalDateTextFieldTest extends WicketTestCase
Form<Void> form = new Form<>("form");
add(form);
- form.add(field = new LocalDateTextField("field", Model.of(val), FormatStyle.SHORT));
+ form.add(field = new LocalDateTextField("field", Model.of(val), "dd-MM-yyyy", "d-M-yyyy"));
}
-
+
@Override
public IResourceStream getMarkupResourceStream(MarkupContainer container,
Class<?> containerClass)