2012-02-15 17 views
1

のための春のMVCモデルのフィールドを操作する...が、私は、この定義されたようなモデルを持っているJSP出力

public class Product{ 
    private long timestamp; 
    // get/set follows... 
} 

タイムスタンプフィールドは、データベースの罰金です。しかし、JSPの出力では、タイムスタンプを長く表示したくないので、カスタマイズされたStringとして表示したいと思います。カスタムメソッドでlong/String変換を定義したいと思います。

タイムスタンプフィールドをDateTimeなどに変換できますが、これは一般的な質問です。モデル自体を変更せずにモデルデータを処理することは可能ですか?私はSpring ConversionとFormatter SPIを調べましたが、ここでは合わないようです(Formatterは主にユーザー入力用です。変換はモデル全体に​​適用され、モデルの1つのフィールドを操作したいだけです)。

私はすでに、ちょうどビューのための新しいオブジェクトを作成するデータベースモデルからすべてのデータを渡し、そこにそれを操作すると思ったが、よりよい解決策が存在しなければならない...

EDIT

いくつかのadditonalコードが...ここに私のコントローラである:

@RequestMapping(method=RequestMethod.GET, value="/") 
public ModelAndView getAllProducts() { 
    List<Product> products = daoReader.findAllProducts(); 

    ModelAndView mv = new ModelAndView("myproductview"); 
    mv.addObject("products", products); 

    return mv; 

そして、これはJSPである(簡体字):

<c:forEach items="${products}" var="currentproduct"> 
     <tr> 
      <td>${currentproduct.timestamp}</td> 
      <td>${currentproduct.name}</td> 
     </tr> 
</c:forEach> 

答えて

1

春景色は、通常モデルのデータにアクセスするためにゲッターとセッターを使用しています。最適な解決策は、日付をフォーマットするゲッターを提供するか、またはlongオブジェクトをDateオブジェクトまたはその他の必要な形式に変換することです。ビューから、このゲッターメソッドにアクセスします。

EDIT

public class Product{ 
    private long timestamp; 

    public Date getDate() { 
     return new Date(timestamp); 
    } 
} 

とお返事のためのビューから

<c:forEach items="${products}" var="currentproduct"> 
     <tr> 
      <td>${currentproduct.date}</td> 
      <td>${currentproduct.name}</td> 
     </tr> 
</c:forEach> 
+0

カスタムJSPタグを使用せずに解決策を知っていますか? –

+0

私が与えたこのソリューションは、カスタムJSPタグを使用せずに動作します。 – aseychell

+0

実践例/チュートリアルを教えてください。どうもありがとう! –

1

整形文字列を返す「特別な」ゲッターを追加するとどうなりますか?

やフォーマットを行うJSPタグのように: のjsp:

<td><my:formatLongTimestamIntoSomethingUsefull 
     value="${currentproduct.timestamp}"/></td> 
+0

おかげで、上記の私の編集を参照してください。問題は、テーブルに表示したいリストにモデルを置くことです。したがって、テーブルには、約20のプロパティ(=フィールド)が異なるセルに表示され、1つのプロパティだけがフォーマットされます。 "タイムスタンプ"プロパティのために私自身のゲッターを実装すると、ループですべて実行する可能性は失われますね。 –

+0

いいえ、このgetterを追加してください: 'String getFormatedTimeStanp(){new date(this.timestamp); ...}'を返し、$ {currentproduct.fromatedtimestamp} ' – Ralph

+0

を使ってください。それは、[viralpatel](http://viralpatel.net/blogs/2008/12/tutorial-create-custom-tag-library-taglib-in-jsp.html)と[この質問]の追加の助けを借りて、うまくいったhttp://stackoverflow.com/questions/1637302/passing-a-java-object-value-in-custom-jsp-tag)。まだ私には少し複雑ですが、PHPの世界から来ているからです:) –

関連する問題