**_*JSP์์ LocalDateTime ํฌ๋งคํ ๋ฌธ์ ํด๊ฒฐ_***
์์ฑ์ผ์: 2023๋ 7์ 21์ผ
โ๊ฒฐ๋ก
LocalDateTime
์ ํ์
์ผ๋ก JSTL์ <fmt:formatDate>
๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ์์ผ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํด์ ์ผ์ ํ์
์ Date
๋ก ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
๐ฉ๋ค์ด๊ฐ๋ฉฐ
LocalDateTime
์ธ ํ์
์ JSP์์ el๋ก ์ถ๋ ฅํ๋๋ ๋ ์ง์ ์๊ฐ ์ฌ์ด์ โTโ๋ผ๋ ๋ฌธ์์ด์ด ๊ปด์ ์ถ๋ ฅ์ด ๋์๋ค. ์ฐพ์๋ณด๋ LocalDateTime
์ ๋ ์ง์ ์๊ฐ์ T ๋ฌธ์๋ก ๊ตฌ๋ถํ๋ค๊ณ ํ๋ค.
private LocalDateTime aprvDttm;
๐๋ฌธ์ ์ ์
์ด๋ฐ ํ์์ด ๋ง์์ ๋ค์ง ์์์ formatting ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด์๋๋ jstl์ <fmt:formatDate>
ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ ๋ ์ง์ ์๊ฐ์ ํ์์ ์ง์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
<fmt:formatDate value="${payInfoDTO.aprvDttm}" pattern="yyyy-MM-dd HH:mm:ss" />
์ด๋ ๊ฒ ์ง์ ํ๊ณ ์คํํ๋๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ใ
21-Jul-2023 21:00:12.945 ์ฌ๊ฐ [http-nio-8080-exec-42] org.apache.catalina.core.ApplicationDispatcher.invoke ์๋ธ๋ฆฟ [jsp]์(๋ฅผ) ์ํ Servlet.service() ํธ์ถ์ด ์์ธ๋ฅผ ๋ฐ์์์ผฐ์ต๋๋ค.
javax.el.ELException: Cannot convert [2023-07-21T20:46:10] of type [class java.time.LocalDateTime] to [class java.util.Date]
at org.apache.el.lang.ELSupport.coerceToType(ELSupport.java:573)
โ์์ธ ์ถ๋ก
์์ธ์ ์ฐพ์๋ณด๋ <fmt:formatDate>
ํ๊ทธ๋ java.util.Date
์ธ์คํด์ค๋ง formatting ๊ฐ๋ฅํ๋ค๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ ๋๋ LocalDateTime
์ธ์คํด์ค๋ฅผ ์ฃผ์ด์ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
๐ช๐ปย ํด๊ฒฐ์ฑ ์๋
- โย el์์ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋ค๊ณ ํด์
LocalDateTime
์ ๋ฌธ์์ด๋ก ๋ณํํด๋ณด์์ผ๋${payInfoDTO.aprvDttm.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))}
๊ฒฐ๊ณผ
21-Jul-2023 21:06:00.109 ์ฌ๊ฐ [http-nio-8080-exec-61] org.apache.catalina.core.ApplicationDispatcher.invoke ์๋ธ๋ฆฟ [jsp]์(๋ฅผ) ์ํ Servlet.service() ํธ์ถ์ด ์์ธ๋ฅผ ๋ฐ์์์ผฐ์ต๋๋ค. java.lang.NullPointerException: formatter at java.base/java.util.Objects.requireNonNull(Objects.java:246) at java.base/java.time.LocalDateTime.format(LocalDateTime.java:1751) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at javax.el.BeanELResolver.invoke(BeanELResolver.java:159) at org.apache.jasper.el.JasperELResolver.invoke(JasperELResolver.java:162) at org.apache.el.parser.AstValue.getValue(AstValue.java:158) at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189) at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:692) at org.apache.jsp.WEB_002dINF.views.fos.cs.mypage.orderDetail_jsp._jspService(orderDetail_jsp.java:326) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:779) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327) at javax.servlet.http.HttpServlet.service(HttpServlet.java:779)
DateTimeFormatter
๊ฐ์ฒด๊ฐ null์ด๋ผ๊ณ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค,,
- ๐บย ์ปจํธ๋กค๋ฌ์์ ๋ ์ง๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํด์ Model ๊ฐ์ฒด์ ๋ฃ์ด์ฃผ๊ธฐ
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedDate = payInfo.getAprvDttm().format(formatter); model.addAttribute("formattedDate", formattedDate);
์ปจํธ๋กค๋ฌ์์ ๋ ์ง๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํด์ Model ๊ฐ์ฒด์ ๋ฃ๋ ๋ฐฉ๋ฒ์ด ์์ง๋ง, ์ด ๊ฒฝ์ฐ ์ผ์๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ ํ๋ฉด์ด ์์ฒญ๋๊ฒ ๋ง์๋ฐ ์ผ์ผํ ๋ณํํด์ model์ ๋ด์์ผ ํ๋ฏ๋ก ์ฝ๋ ์ค๋ณต ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ด ๋ฐฉ๋ฒ์ ใดใดโฆ
๐กํด๊ฒฐ๋ฐฉ๋ฒ
JSP ๋ทฐ์์ JSTL์ ์ด์ฉํด ํฌ๋งทํ
ํ๋ ๊ฒ์ด ๊ฐ์ฅ ๊น๋ํ์ง๋ง, ํ์ฌ ํ๋ก์ ํธ์์๋ ์ผ์๋ฅผ LocalDate
, ์๊ฐ์ LocalTime
, ์ผ์๋ฅผ LocalDateTime
์ผ๋ก ์ ์ํ๊ธฐ ๋๋ฌธ์ fmt:formatDate
์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
ํ์ฌ JSP๋ฅผ ์ฌ์ฉํ๋ ์ํฉ์์๋ ์ปจํธ๋กค๋ฌ์์ ๋ ์ง๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํด์ Model ๊ฐ์ฒด์ ๋ฃ๋ ๋ฐฉ๋ฒ๋ฐ์ ์์๋ค. ๊ทธ๋์ ์ผ์๋ฅผ LocalDateTime
์์ Date
๋ก ๋ณ๊ฒฝํ๊ณ <fmt:formatDate>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
Uploaded by N2T