2009-08-28 13 views
3

リクエストから出てくるJava Dateの書式設定が必要なJSPを作成しています。私は次のようにしています:JSP日付フォーマッタで解析不能な文字列を処理する

<fmt:formatDate value="${attribute.value}" pattern="yyyy-MM-dd HH:mm:ss"/> 

そして、それはJava Datesできれいに動作します。

ただし、正確に同じ名前(attribute.value)のリクエスト属性フィールドは実際には日付ではないため、そのようにフォーマットしないでください。私がしたいのは、解析不可能な日付で例外をスローするのではなく、その文字列をそのままfmt:formatタグに渡すことです。

私はc:chooseを使用して同様のことを達成できましたが、JSPビューをできるだけ基本データから分離するので、これは私にとって理想的な選択ではありません。だから、

<fmt:formatDate value="I AM NOT A DATE" pattern="yyyy-MM-dd HH:mm:ss"/> 

のようなものを作るためにそこの方法は、単純に生成されたHTMLで

I AM NOT A DATE 

を評価していますか?

答えて

3

これは行うのに十分簡単だった:私は期待していたが、それが動作するよう

<c:catch var="ex"> 
    <fmt:formatDate value="${attribute.value}" pattern="yyyy-MM-dd HH:mm:ss"/> 
</c:catch> 
<c:if test="${not empty ex}"> 
    ${attribute.value} 
</c:if> 

としてエレガントされていません。

3

あなたがCを定義することができますこの方法:-)タグを作成します。例えば、あなたのタグファイルに選択し、JSPであなたが持っているものとほぼ同じである、単一のクリーンなラインを持っている:

<your:formatDate value="I AM NOT A DATE" pattern="yyyy-MM-dd HH:mm:ss"/> 
カスタムタグの質問がある場合は、バック

(あなたはいつも同じパターンを使用している場合または、あなたも自分のタグにハードコード、それをしてもきれい上記作ることができます。)

コメント。

EDIT:ここはあなたが試してみたい場合は、このためにタグを作ることができる方法は次のとおりです。

1)が作る "WEB-INFを/タグ/ someNamespace/yourTag.tag" で、次のようコード:

<%@ tag isELIgnored="false" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ attribute name="date" type="java.util.Date" required="true" %> 
<c:choose> 
<c:when test="${date instanceOf java.util.Date}"> 
<fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss"/> 
</c:when> 
<c:otherwise>${date}</c:otherwise> 
</c:choose> 

2)あなたのページにタグを追加します。

<%@ taglib tagdir="/WEB-INF/tags/someNamespace" prefix="s" %> 

3)それを使用します。

<s:yourTag date="${attribute.date}"/> 

ご覧のとおり、実際にはそれほど多くのコードは必要ありません。このロジックを他の場所で繰り返すと、カスタムタグが非常に便利になります。

+0

自分のタグを作成した経験はありませんが、おそらくそれは私のアプリケーションでは過度のものだと思います。少なくとも今のところ、1つのJSPには1つの場所しかありません。確かに、将来的にはそれを使うことができるかもしれませんが、今はこれがより多くのコードを作成しています。 –

+0

フォローアップ:私は実際にどのようにこれを選択するのか分からない。私が使うことができるtry/catchのようなタグはありますか?何かが日付であるかどうかをテストする方法で十分であるはずです。 –

関連する問題