3

jspページでブロックされ、1人のJavaエンジニアがサポートできなくなりました。

2つのインスタンスでロードされる「module-review.jsp」と呼ばれるテンプレートがあります。通常のページを介して、それをjsonオブジェクトの一部として返すAPIを介してロードします。

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

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

したがって、日付の値が必要な場合は、${review.updatedDate._value}を使用します

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

._valueが存在しない場合にのみ${review.updatedDate}を表示する一連の条件ステートメントが必要です。私が試したすべてのことで、._ valueが存在しないというエラーが発生します。これは、かなり皮肉なことです。

私は現在これを使おうとしていますが、2番目の条件で失敗します:

<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

1 に答える 1

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 クラスに渡すことです。

package typetest;

import java.util.Map;

public class TypeUtil {

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

}

これは、TLD ファイル (例: WEB-INF/maptest.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>
于 2009-07-05T21:07:34.873 に答える