diff --git a/core/src/main/java/org/apache/struts2/components/Date.java b/core/src/main/java/org/apache/struts2/components/Date.java index 8734fcc69..7a8cda061 100644 --- a/core/src/main/java/org/apache/struts2/components/Date.java +++ b/core/src/main/java/org/apache/struts2/components/Date.java @@ -293,7 +293,9 @@ public class Date extends ContextBean { final ZoneId tz = getTimeZone(); // find the name on the valueStack Object dateObject = findValue(name); - if (dateObject instanceof java.util.Date) { + if (dateObject instanceof java.sql.Date) { + date = ((java.sql.Date) dateObject).toLocalDate().atStartOfDay(tz); + } else if (dateObject instanceof java.util.Date) { date = ((java.util.Date) dateObject).toInstant().atZone(tz); } else if (dateObject instanceof Calendar) { date = ((Calendar) dateObject).toInstant().atZone(tz); diff --git a/core/src/test/java/org/apache/struts2/components/DateTest.java b/core/src/test/java/org/apache/struts2/components/DateTest.java index 2b9ca8bd7..ffe01a52a 100644 --- a/core/src/test/java/org/apache/struts2/components/DateTest.java +++ b/core/src/test/java/org/apache/struts2/components/DateTest.java @@ -81,6 +81,28 @@ public class DateTest extends StrutsInternalTestCase { assertEquals(expected, writer.toString()); } + public void testJavaSqlDate() { + // given + Date date = new Date(stack); + date.setDateFormatter(new SimpleDateFormatAdapter()); + + java.sql.Date now = new java.sql.Date(System.currentTimeMillis()); + + String expected = SimpleDateFormat.getDateInstance(DateFormat.MEDIUM, ActionContext.getContext().getLocale()).format(now); + context.put("myDate", now); + + Writer writer = new StringWriter(); + + // when + date.setName("myDate"); + date.setNice(false); + date.start(writer); + date.end(writer, ""); + + // then + assertEquals(expected, writer.toString()); + } + @Override public void setUp() throws Exception { super.setUp();