2012-04-12 2 views
0

Map<String, Object> 매개 변수를 사용하여 JSP에 URL을 작성하려고합니다. 키와 값을 PARAMS :지도를 통해 기존의 코드를 반복하고 C를 추가 내가지도의 항목의 값이 실제로 Object의 배열 인 경우에 실행했습니다JSTL에서 배열의 클래스 이름 얻기

<c:url value="/"> 
    <c:forEach items="${myParamMap}" var="parameter"> 
    <c:param name="${parameter.key}" value="${parameter.value}" /> 
    </c:forEach> 
</c:url> 

. 나의 다음 시도는 필요에 따라 값을 반복 중첩 루프를 추가했다 :

<c:url value="/"> 
    <c:forEach items="${myParamMap}" var="parameter"> 
    <c:forEach items="${parameter.value}" var="innerValue"> 
     <c:param name="${parameter.key}" value="${innerValue}" /> 
    </c:forEach> 
    </c:forEach> 
</c:url> 

그러나 물론이 값이 반복 가능하지 않은 정상적인 상황을 나누기

.

다음 생각은 그 값이 일종의 "instanceof"체크를 통해 배열인지 확인하는 것이 었습니다. 인터넷에서이 작업을 수행 할 수있는 유일한 방법은 ${object.class.className == 'Whatever'}입니다.

표현식이 ${someArray.class} 인 경우 JSTL이 .class 부분을 정수로 변환하려고 시도하기 때문에 색인으로 사용할 수 없습니다 (누군가 좋은 생각이라고 생각할 수 없습니다) .

내 다음 조치는 스크립틀릿을 사용하는 것입니다. 그러나 순수 JSTL로이 작업을 수행 할 수있는 방법이 있는지 궁금합니다.


이 경우에는 스크립틀릿을 사용하십시오.

<c:set var="val" value="${parameter.value}"> 
<% boolean isArray = pageContext.getAttribute("val").getClass().isArray(); %> 
<c:choose> 
    <c:when test="<%= isArray >"> 
    ... forEach loop to set all the params ... 
    </c:when> 
    <c:otherwise> 
    ... just set the param with key & value ... 
    </c:otherwise> 
</c:choose> 
+0

'$ {paramValues}'는 실제로'Map '입니다. 왜 단지 그것을 치료하지 않는가? 구체적인 문제에 관해서는'object [0] .class.name'을 사용하십시오.하지만 항상 java.lang.String을 얻을 것입니다. – BalusC

+0

실수로 paramValues를 사용하지 않습니다. 내부 라이브러리에서 Map을 사용하고 있습니다. 이를 반영하기 위해 내 게시물을 수정하겠습니다. –

답변

1

열고 JSP 스크립틀릿 <% ... %> : 내가 좋아하는 뭔가를 함께했다. 이 비표준 상황에서 나는 자바 언어를 더 잘 사용한다고 믿는다. 당신이 내부 스크립틀릿 사용할 수 있습니다 예를 들어

도 PARAMS :

<c:set var="className" value="<%= ... get class name ... %>" /> 

또는

<c:set var="isArray" value="<%= a.getClass().isArray() %>" /> 

당신이 스크립틀릿에 a를 사용하려는 경우 예를 들어, pageContext에에서 그것을 얻을 필요가 기억

를 :

<% Object a = pageContext.getParameter("innerValue"); %>