1
1

More than 3 years have passed since last update.

ParseException: Unparseable dateとなった時の対応方法

Posted at

事象 : f:convertDateTimeを使ったらエラーになった

  • 環境
    • CentOS Linux release 7.8.2003 (Core)
    • Eclipse IDE for Enterprise Java Developers.Version: 2020-03 (4.15.0)
    • openjdk version "11.0.7" 2020-04-14 LTS
    • JSF 2.3.9
java.text.ParseException: Unparseable date: "sampleBean.timestamp"
    at java.base/java.text.DateFormat.parse(DateFormat.java:395)
    at javax.faces.convert.DateTimeConverter$FormatWrapper.parse(DateTimeConverter.java:489)
    at javax.faces.convert.DateTimeConverter$FormatWrapper.access$100(DateTimeConverter.java:470)
    at javax.faces.convert.DateTimeConverter.getAsObject(DateTimeConverter.java:437)
    at com.sun.faces.facelets.tag.jsf.ConverterTagHandlerDelegateImpl.applyAttachedObject(ConverterTagHandlerDelegateImpl.java:120)
    at javax.faces.view.facelets.FaceletsAttachedObjectHandler.applyAttachedObject(FaceletsAttachedObjectHandler.java:60)
    at com.sun.faces.facelets.tag.jsf.ConverterTagHandlerDelegateImpl.apply(ConverterTagHandlerDelegateImpl.java:53)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:111)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:179)
...省略...

原因 : h:outputTextのvalue属性を#{}で囲むのを忘れた

  1. f:convertDateTimeから(convertDateTime(JSF 2.2 View Declaration Language: JSP Variant))
  2. javax.faces.convert.DateTimeConverter#getAsObjectが呼ばれて(DateTimeConverter | JavaServer Faces API (2.2))
  3. javax.faces.convert.DateTimeConverter.FormatWrapper#parseが呼ばれて(DateTimeConverter.FormatWrapper (Mojarra Implementation Javadoc (2.3)))
  4. java.text.DateFormat#parseParseExceptionになる
  5. 理由には「 指定された文字列の先頭が解析できない場合。」とある(DateFormat (Java Platform SE 8))

バカっぽいけどよくやる自分がいる

    <h:outputText value="sampleBean.timestamp">
      <f:convertDateTime pattern="yyyy-MM-dd" timeZone="Japan"/>
    </h:outputText>

対応 : EL式はちゃんと#{}で囲む

    <h:outputText value="#{sampleBean.timestamp}">
      <f:convertDateTime pattern="yyyy-MM-dd" timeZone="Japan"/>
    </h:outputText>
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1