This is an automated email from the ASF dual-hosted git repository.
lukaszlenart pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/struts.git
The following commit(s) were added to refs/heads/main by this push:
new 0d2d11071 WW-5530 make DateConverter work for LocalDate and LocalTime
(#1223)
0d2d11071 is described below
commit 0d2d11071bb0ff8c7e0ec19c85260df42823fc51
Author: bill-humblcloud <[email protected]>
AuthorDate: Wed Feb 26 02:29:36 2025 -0500
WW-5530 make DateConverter work for LocalDate and LocalTime (#1223)
* make DateConverter work for LocalDate and LocalTime
* add date tests
---
.../conversion/impl/XWorkBasicConverter.java | 6 +++++
.../conversion/impl/XWorkConverterTest.java | 27 ++++++++++++++++++++++
2 files changed, 33 insertions(+)
diff --git
a/core/src/main/java/org/apache/struts2/conversion/impl/XWorkBasicConverter.java
b/core/src/main/java/org/apache/struts2/conversion/impl/XWorkBasicConverter.java
index c270a4bcd..281e36380 100644
---
a/core/src/main/java/org/apache/struts2/conversion/impl/XWorkBasicConverter.java
+++
b/core/src/main/java/org/apache/struts2/conversion/impl/XWorkBasicConverter.java
@@ -25,7 +25,9 @@ import org.apache.struts2.StrutsConstants;
import org.apache.struts2.conversion.TypeConversionException;
import java.lang.reflect.Member;
+import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.time.LocalTime;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
@@ -100,8 +102,12 @@ public class XWorkBasicConverter extends
DefaultTypeConverter {
result = doConvertToArray(context, o, member, propertyName, value,
toType);
} else if (Date.class.isAssignableFrom(toType)) {
result = doConvertToDate(context, value, toType);
+ } else if (LocalDate.class.isAssignableFrom(toType)) {
+ result = doConvertToDate(context, value, toType);
} else if (LocalDateTime.class.isAssignableFrom(toType)) {
result = doConvertToDate(context, value, toType);
+ } else if (LocalTime.class.isAssignableFrom(toType)) {
+ result = doConvertToDate(context, value, toType);
} else if (Calendar.class.isAssignableFrom(toType)) {
result = doConvertToCalendar(context, value);
} else if (Collection.class.isAssignableFrom(toType)) {
diff --git
a/core/src/test/java/org/apache/struts2/conversion/impl/XWorkConverterTest.java
b/core/src/test/java/org/apache/struts2/conversion/impl/XWorkConverterTest.java
index bdf2a2365..256d9b231 100644
---
a/core/src/test/java/org/apache/struts2/conversion/impl/XWorkConverterTest.java
+++
b/core/src/test/java/org/apache/struts2/conversion/impl/XWorkConverterTest.java
@@ -50,6 +50,10 @@ import java.util.*;
import static org.junit.Assert.assertArrayEquals;
+import java.time.format.DateTimeFormatter;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
import java.util.Date;
import java.util.Set;
@@ -100,6 +104,29 @@ public class XWorkConverterTest extends XWorkTestCase {
Date dateRfc3339DateOnly = (Date) converter.convertValue(context,
null, null, null, "2001-01-10", Date.class);
assertEquals(date, dateRfc3339DateOnly);
+
+ // java.time library tests
+ DateTimeFormatter formatterDate =
DateTimeFormatter.ofPattern("MM/dd/yyyy");
+ LocalDate localDate = LocalDate.parse("01/10/2001", formatterDate);
+
+ DateTimeFormatter formatterDateTime =
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
+ LocalDateTime localDateTime =
LocalDateTime.parse("2001-01-10T10:11:12", formatterDateTime);
+
+ DateTimeFormatter formatterTime =
DateTimeFormatter.ofPattern("HH:mm:ss");
+ LocalTime localTime = LocalTime.parse("10:11:12", formatterTime);
+
+ String localDateStr = (String) converter.convertValue(context, null,
null, null, localDate, String.class);
+ String localDateTimeStr = (String) converter.convertValue(context,
null, null, null, localDateTime, String.class);
+ String localTimeStr = (String) converter.convertValue(context, null,
null, null, localTime, String.class);
+
+ LocalDate localDate2 = (LocalDate) converter.convertValue(context,
null, null, null, localDateStr, LocalDate.class);
+ assertEquals(localDate, localDate2);
+
+ LocalDateTime localDateTime2 = (LocalDateTime)
converter.convertValue(context, null, null, null, localDateTimeStr,
LocalDateTime.class);
+ assertEquals(localDateTime, localDateTime2);
+
+ LocalTime localTime2 = (LocalTime) converter.convertValue(context,
null, null, null, localTimeStr, LocalTime.class);
+ assertEquals(localTime, localTime2);
}
public void testDateConversionWithDefault() throws ParseException {