[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 メーリングリストの案内