2009-07-02 5 views
3

jsp 페이지에서 차단되어 1 명의 Java 엔지니어가 지금 도움을받을 수 없습니다.JSTL : 속성이 존재하지 않는지 확인하십시오.

일반적인 페이지로드를 통해 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}는 날짜 값을 직접 반환합니다.

이 아닌 경우 $ {review.updatedDate} 만 표시 할 조건문 집합이 있어야합니다. 내가 시도한 모든 것은 나에게 오류를 준다. 가치는 존재하지 않고 오히려 아이러니하다.

나는 현재 이것을 사용하려고

하지만 2 조건에 실패

, 당신이 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

:

<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을 테스트하려고 할 때 작동하지 않았습니다.


아마 더 신뢰할 수있는 방법은 자바 클래스에 떨어져 시험을 손으로하는 것입니다 : 이것은 (예 : 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> 
,369을