2009-07-02 113 views
3

我在jsp頁面被阻止,我們的1個java工程師現在無法提供幫助。JSTL:檢查屬性是否不存在

有一個名爲「module-review.jsp」的模板,在2個實例中加載,通過常規頁面加載並通過api加載,並將其作爲json對象的一部分返回。

有一個名爲「review.updatedDate」的變量。在一個正常的頁面視圖,這個變量加載爲一個HashMap進入頁面,看起來像這樣:

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

所以,如果我想要的日期值,我用$ {} review.updatedDate._value

但是,當API加載module-review.jsp時,日期值將直接作爲日期對象返回,其中$ {review.updatedDate}直接返回日期值。

如果._值不存在,我需要有一組條件語句只顯示$ {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
從「不這樣做的」,我想你可以測試 類型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>