【JSP】文字列フォーマット後のDate型フィールドをjspから参照する
jspファイルから日時を扱うDate型フィールドのgetterメソッドを呼び出して
ページへ値を表示させる際に起きたエラーとその改善策をメモします。
エラーの内容と原因
getterの戻り値の型がフィールドと異なる(String型)
Date型フィールドposted_atのgetterメソッド内で
指定の書式にフォーマットするロジックを持つメソッドを呼び出し、
文字列として返す方法を取りましたがエラーが起きてしまいました。
posted_at(フィールド)のgetterメソッド getPosted_at と
その内部で呼び出す文字列フォーマットの dateFormat メソッド
その内部で呼び出す文字列フォーマットの dateFormat メソッド
public String getPosted_at() { return dateFormat(); } public String dateFormat() { SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyy/MM/dd/HH:mm"); String formatedDate = simpledateformat.format(this.posted_at); return formatedDate; }
– jsp –
クラスオブジェクトtsubuyaki から posted_at のゲッターを参照
<p>投稿日時:<%= tsubuyaki.getPosted_at() %></p>
エラー発生
(内容)
HTTPステータス 500 – javax.servlet.ServletException: java.lang.NoSuchMethodError: model.Tsubuyaki.getPosted_at()Ljava/util/Date;
メッセージ
javax.servlet.ServletException: java.lang.NoSuchMethodError: model.Tsubuyaki.getPosted_at()Ljava/util/Date;
メッセージ
javax.servlet.ServletException: java.lang.NoSuchMethodError: model.Tsubuyaki.getPosted_at()Ljava/util/Date;
getterとしてメソッドを定義する場合は該当するフィールドの型と一致しなければいけないようです。
解決
ですので、jspからはgetterではなく
フィールドを文字列でフォーマットするメソッドを直接呼び出すことにしました。
private Date posted_at; public Date getPosted_at() { return this.posted_at; } public String getFormatedDate() { SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyy/MM/dd/HH:mm"); String formatedDate = simpledateformat.format(this.posted_at); return formatedDate; }
– jsp –
<p>投稿日時:<%= tsubuyaki.getFormatedDate() %></p>
表示結果
なお、今回はモデルクラスの方で書式のフォーマットを行なう例を取り上げましたが、
jspファイルのスクリプトレット内でフォーマットのロジックを記述し、
getterで取得した値をそこへ渡してあげて表示させても良いかと思います。