2009-07-02 19 views
3

jspページでブロックされていて、私たちの1人のJavaエンジニアが現在手助けできません。JSTL:プロパティが存在しないか確認してください

"module-review.jsp"と呼ばれるテンプレートが2つのインスタンスにロードされ、通常のページロードによって、jsonオブジェクトの一部として返されるapi経由でロードされます。

"review.updatedDate"という変数があります。通常のページビューでは、この変数は、ページにハッシュマップとしてロードされ、次のようになります。

{_value=2009-07-02 11:54:30.0, class=sql-timestamp} 

私は日付値をしたいのであれば、私は$ {} review.updatedDate._value

を使用しますただし、module-review.jspがAPIによってロードされると、日付値が日付オブジェクトとして直接返されます。$ {review.updatedDate}は日付値を直接返します。

でない場合、$ {review.updatedDate}のみを表示する条件文のセットが必要です。私が試したことはすべて私にエラーを与えます。値は存在しません。むしろ皮肉です。

私は現在、これを使用しようとしていますが、それは第二の条件で失敗:

<c:if test="${ (not empty review.updatedDate['_value']) }"> 
${review.updatedDate._value} 
</c:if> 

<c:if test="${ (empty review.updatedDate['_value']) }"> 
${review.updatedDate} 
</c:if> 

答えて

4

別に「それをそのようにはしない」から、私はあなたがupdatedDateの種類をテストすることができると思います:

<c:choose> 
    <c:when test="${review.updatedDate.class.name == 'java.util.Date'}"> 
     Date: ${review.updatedDate} 
    </c:when> 
    <c:otherwise> 
     Map: ${review.updatedDate._value} 
    </c:otherwise> 
</c:choose> 

...日付がDateクラスのインスタンスであると仮定します。不思議なことに、このアプローチは、java.util.HashMapをテストしようとしたときに機能しませんでした。


おそらく、より信頼性のアプローチは、Javaクラスへのオフテストを手に次のようになります。これは、(例えばWEB-INF/maptest TLDファイルでカスタム関数にマップすることができ

package typetest; 

import java.util.Map; 

public class TypeUtil { 

    public static boolean isMap(Object o) { 
     return o instanceof Map; 
    } 

} 

.TLD):関数をインポート

<?xml version="1.0" encoding="UTF-8"?> 
<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" 
    version="2.1"> 
    <tlib-version>1.0</tlib-version> 
    <short-name>myfn</short-name> 
    <uri>http://typeutil</uri> 
    <function> 
     <name>isMap</name> 
     <function-class>typetest.TypeUtil</function-class> 
     <function-signature>boolean isMap(java.lang.Object)</function-signature> 
    </function> 
</taglib> 

サンプルJSP:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ taglib prefix="myfn" uri="http://typeutil"%> 
<html> 
<body> 
<c:choose> 
    <c:when test="${myfn:isMap(review.updatedDate)}"> 
     Map: ${review.updatedDate._value} 
    </c:when> 
    <c:otherwise> 
     Date: ${review.updatedDate} 
    </c:otherwise> 
</c:choose> 
</body> 
</html> 
関連する問題