2012-02-09 4 views
1

JSP/JSTLの特定のクラスのデフォルトレンダラーを登録する方法があるのだろうかと思っていました。JSP/JSTLでクラスのレンダラーを登録するには?

私のページには、各テーブル行が一般的なList<Object>として到着する表形式のレポートが表示されています。私は特定の品目の種類を事前に知らないので、<c:out ...>で値を出力しています。これは私が知る限りtoString()です。

ここでアイテムのクラスに基づいてフォーマットを変更したいと思います。小数の形式を変更します。もちろん私はタイプを知らないので<fmt:formatXXX ...>を使うことはできません。

JSFでこれが可能だと思います。しかし、JSPでこれを達成する方法はありますか?

ベストショットのsofarはList<Object>List<String>に変換し、コントローラクラスにフォーマットを適用することですが、これは改造者のIMHOを登録するよりもややエレガントです。

答えて

1

JSPには「レンダラ」という概念はありません。コンポーネントベースのMVCフレームワークではありません。しかし、custom tagを作成することができます。

また、あなたはプレーンなJSTLでこのような何かを行うことができ、それだけでObject#getClass()をチェックすることにより、ELオブジェクトのクラスを把握することが可能です:

<c:choose> 
    <c:when test="${item['class'].name == 'java.lang.Integer'}"> 
     <fmt:formatNumber value="${item}" type="number" /> 
    </c:when> 
    <c:when test="${item['class'].name == 'java.math.BigDecimal'}"> 
     <fmt:formatNumber value="${item}" type="currency" /> 
    </c:when> 
    <c:when test="${item['class'].name == 'java.util.Date'}"> 
     <fmt:formatDate value="${item}" type="date" /> 
    </c:when> 
    <c:otherwise> 
     <c:out value="${item}" /> 
    </c:otherwise> 
</c:choose> 
+0

は私に良いヒントように見えます!試してみるのに1秒をあげてください:) –

+0

これはおそらく私のためにちょうど良いでしょう、チップのおかげで! –

+0

ようこそ。 – BalusC

関連する問題