[Seasar-user:21599] SAStrutsアクションフォームのTimestamp型のプロパティについて
Yoshiaki Hidai
[E-MAIL ADDRESS DELETED]
2013年 4月 17日 (水) 16:29:56 JST
はじめまして、樋代と申します。
よろしくお願いいたします。
SAStrutsでWebアプリケーションを構築しております。
画面の値が、アクションフォームにうまく入らない問題が出てきたため、
質問させていただきます。
画面で下記のようなTimestamp型の値を持つhiddenを用意し、
<input type="hidden" name="updateTimestamp" value="2013-04-16 13:27:23.357">
この値がsubmitされたときに下記のアクションフォームのプロパティに
値が入ってくるようにしたいと思っています。
public class UserMstForm {
public Timestamp updateTimestamp;
}
実際、上記のTimestamp型の値をsubmitすると、
アクションフォームに値を設定しようとされるのですが、
その際中にS2RequestProcessorの中で例外が発生します。(※メールの一番下に添
付)
ソースを追ってみると、Timestamp型の値に対して、
DateConversionUtilで日付でフォーマット(yyyy/MM/dd)しようとして失敗していま
す。
アクションフォームではTimestamp型のプロパティは推奨されていないのでしょう
か。
DBから取得したTimestamp型の値をそのまま画面に渡したいので、
出来ればTimestamp型のプロパティを使いたいとおもっております。
暫定的に、TimestampConversionUtilのtoTimestampの中で、
下記の追加コードがあれば、この例外は発生しないのですが、
公式な対応で解決したいと思っております。
public static Timestamp toTimestamp(Object o, String pattern) {
if (o instanceof Timestamp) {
return (Timestamp) o;
}
↓■追加部分
if (o instanceof String) {
return Timestamp.valueOf((String)o);
}
↑■追加部分
Date date = DateConversionUtil.toDate(o, pattern);
if (date != null) {
return new Timestamp(date.getTime());
}
return null;
}
ご存じの方、ご意見を聞かせていただければと思います。
よろしくお願いいたします。
■例外
org.seasar.framework.beans.IllegalPropertyRuntimeException: [ESSR0059]クラス
(jp.co.ikic.gabriel.form.UserMstForm)のプロパティ(updateTimestamp)の設定に失
敗しました。理由は
org.seasar.framework.beans.IllegalPropertyRuntimeException: [ESSR0059]クラス
(jp.co.ikic.gabriel.form.UserMstForm)のプロパティ(updateTimestamp)の設定に失
敗しました。理由はorg.seasar.framework.exception.ParseRuntimeException:
[ESSR0050]解析に失敗しました。理由はjava.text.ParseException: Unparseable
date: "2013-04-16 13:27:23.357"
at
org.seasar.struts.action.S2RequestProcessor.processPopulate(S2RequestProcess
or.java:293)
at
org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:
104)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:
432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:305)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:210)
at
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2Container
Filter.java:79)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:210)
at
org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployF
ilter.java:71)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:210)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.
java:749)
at
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDis
patcher.java:487)
at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatch
er.java:412)
at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher
.java:339)
at
org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:219)
at
org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:99)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:210)
at
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2Container
Filter.java:79)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:210)
at
org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployF
ilter.java:71)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:210)
at
org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:210)
at
jp.co.ikic.emerson.javaee.ExceptionFilter.doFilter(ExceptionFilter.java:30)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:243)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:210)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:222)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:123)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase
.java:472)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171
)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:118)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Proce
ssor.java:1004)
at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(Abstrac
tProtocol.java:589)
at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:
312)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:11
45)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:6
15)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.seasar.framework.beans.IllegalPropertyRuntimeException:
[ESSR0059]クラス(jp.co.ikic.gabriel.form.UserMstForm)のプロパティ
(updateTimestamp)の設定に失敗しました。理由はorg.seasar.framework.exception.
ParseRuntimeException: [ESSR0050]解析に失敗しました。理由は
java.text.ParseException: Unparseable date: "2013-04-16 13:27:23.357"
at
org.seasar.framework.beans.impl.PropertyDescImpl.setValue(PropertyDescImpl.j
ava:279)
at
org.seasar.struts.action.S2RequestProcessor.setSimpleProperty(S2RequestProce
ssor.java:482)
at
org.seasar.struts.action.S2RequestProcessor.setProperty(S2RequestProcessor.j
ava:398)
at
org.seasar.struts.action.S2RequestProcessor.processPopulate(S2RequestProcess
or.java:290)
... 47 more
Caused by: org.seasar.framework.exception.ParseRuntimeException: [ESSR0050]
解析に失敗しました。理由はjava.text.ParseException: Unparseable date:
"2013-04-16 13:27:23.357"
at
org.seasar.framework.util.DateConversionUtil.toDate(DateConversionUtil.java:
97)
at
org.seasar.framework.util.DateConversionUtil.toDate(DateConversionUtil.java:
80)
at
org.seasar.framework.util.DateConversionUtil.toDate(DateConversionUtil.java:
62)
at
org.seasar.framework.util.TimestampConversionUtil.toTimestamp(TimestampConve
rsionUtil.java:57)
at
org.seasar.framework.util.TimestampConversionUtil.toTimestamp(TimestampConve
rsionUtil.java:43)
at
org.seasar.framework.beans.impl.PropertyDescImpl.convertDate(PropertyDescImp
l.java:333)
at
org.seasar.framework.beans.impl.PropertyDescImpl.convertIfNeed(PropertyDescI
mpl.java:307)
at
org.seasar.framework.beans.impl.PropertyDescImpl.setValue(PropertyDescImpl.j
ava:245)
... 50 more
Caused by: java.text.ParseException: Unparseable date: "2013-04-16 13:27:23.
357"
at java.text.DateFormat.parse(DateFormat.java:357)
at
org.seasar.framework.util.DateConversionUtil.toDate(DateConversionUtil.java:
95)
... 57 more
Seasar-user メーリングリストの案内