[Seasar-user:3726] Re: [S2JSF] java.sql.Timestampのプロパティの扱いについて

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2006年 6月 1日 (木) 01:18:53 JST


米林です。

From: "Junichi Kato" <[E-MAIL ADDRESS DELETED]>
Sent: Wednesday, May 31, 2006 11:44 PM

> 横着者でして、S2DAOで利用しているDTOクラスを、S2JSFのフォーム用のDTOクラ
> スを兼用していて、以下のような例外が起こっています。
>
> DTOクラスには、Timestamp型のプロパティがあって、それをコンバータを使って
> ブラウザ上で文字列として表示することはできていますが、逆にブラウザ上の入
> 力値をTimestamp型のプロパティに更新することができていません。
>
> 以下のように、フォームから送信ボタンを押すと例外が発生してしまいます。
> (hogehoge.createDateはTimestamp型です。)
> なんとか、Timestamp型のプロパティに値を設定したのですが、解決方法をご存
> じの方いらっしゃいますでしょうか?

最新のs2jsf-exampleで同様の動きを試したところ問題無く設定されますね。
という事でJSF実装にTeedaを利用してみてはいかがでしょう?(^^

冗談はさておき、MyFacesのValueBindingImpl内での例外で
そちらには手を出せませんので、やるとするのであれば
DTO(hogehoge)内で変換するのはいかがでしょう?

JSF用のフィールドはDate型で定義し、Date型のsetter内で
Timestampに変換するといった以下な感じです。
------------------------------------------------
private Timestamp createDate;

public Date getCreateDate() {
    return this.createDate;
}

public void setCreateDate(Date createDate) {
    this.setCreateDate2(new Timestamp(createDate.getTime()));
}

private void setCreateDate2(Timestamp createDate2) {
    this.createDate = createDate2;
}
------------------------------------------------

> 2006-05-31 23:34:04,752 [http-8080-Processor24] ERROR
org.apache.myfaces.el.ValueBindingImpl - Cannot set value for expression
> '#{hogehogeDto.createDate}' to a new value of type java.util.Date
> javax.servlet.jsp.el.ELException: "java.util.Date" 型の値を
"java.sql.Timestamp" 型に変換しようとしています
> at org.apache.commons.el.Logger.logError(Logger.java:481)
> at org.apache.commons.el.Logger.logError(Logger.java:498)
> at org.apache.commons.el.Logger.logError(Logger.java:566)
> at org.apache.commons.el.Coercions.coerceToObject(Coercions.java:799)
> at org.apache.commons.el.Coercions.coerce(Coercions.java:343)
> at org.apache.myfaces.el.ValueBindingImpl.coerce(ValueBindingImpl.java:568)
> at org.apache.myfaces.el.ValueBindingImpl.setValue(ValueBindingImpl.java:338)
> at javax.faces.component.UIInput.updateModel(UIInput.java:252)
> at javax.faces.component.UIInput.processUpdates(UIInput.java:191)
> at
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:438)
> at
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:438)
> at
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:438)
> at javax.faces.component.UIForm.processUpdates(UIForm.java:81)
> at
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:438)
> at
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:438)
> at
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:438)
> at
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:438)
> at
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:438)
> at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:173)
> at org.seasar.jsf.component.S2UIViewRoot.processUpdates(S2UIViewRoot.java:79)
> at
org.seasar.jsf.lifecycle.LifecycleImpl.updateModelValues(LifecycleImpl.java:157)
> at org.seasar.jsf.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:94)
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:109)
> at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilt
erChain.java:252)
> at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.
java:173)
> at org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:62)
> at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilt
erChain.java:202)
> at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.
java:173)
> at
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilt
er.java:60)
> at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilt
erChain.java:202)
> at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.
java:173)
> at
org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilte
r.java:112)
> at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilt
erChain.java:202)
> at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.
java:173)
> at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:2
13)
> at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:1
78)
> at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
> at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
> at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107
)
> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
> at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868)
> at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConne
ction(Http11BaseProtocol.java:663)
> at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:52
7)
> at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorker
Thread.java:80)
> at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:68
4)
> at java.lang.Thread.run(Thread.java:595)
>
>
> 開発環境
>
> Apache Tomcat 5.5.16
> S2 2.3.7
> S2JSF 1.0.14
> S2DAO 1.0.32
>
>
> faces-config.xml
>
> <converter>
> <converter-for-class>java.util.Date</converter-for-class>
> <converter-class>org.seasar.jsf.convert.S2DateTimeConverter</converter-class>
> </converter>
>
> hogehoge.dicon
>
> <component name="inputDateTimeConverter"
class="org.seasar.jsf.convert.S2DateTimeConverter">
> <property name="pattern">"yyyy/MM/dd hh:mm:ss"</property>
> </component>
>
> hogehoge.html
>
> <input type="text" id="entry_create_date"
> m:label="投稿日時"
> m:value="#{hogehogeDto.createDate}"
> m:converter="#{inputDateTimeConverter}"
> m:required="true"/>
>
> ───────────────────────────────
> 有限会社 グランテック
> 代表取締役
> 加藤 潤一 Junichi Kato
>
> 〒150-0011 東京都渋谷区東1-23-4
> TEL : 03-3498-2011
> FAX : 03-3498-2012
> Mobile : 090-7238-6314
> [E-MAIL ADDRESS DELETED] http://www.grandtech.jp/




Seasar-user メーリングリストの案内