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>
'$ {paramValues}'는 실제로'Map'입니다. 왜 단지 그것을 치료하지 않는가? 구체적인 문제에 관해서는'object [0] .class.name'을 사용하십시오.하지만 항상 java.lang.String을 얻을 것입니다. –
BalusC
실수로 paramValues를 사용하지 않습니다. 내부 라이브러리에서 Map을 사용하고 있습니다. 이를 반영하기 위해 내 게시물을 수정하겠습니다. –