문제

문자열 목록을 취하는 사용자 정의 태그가 있다고 가정합니다.

<%@ attribute name="thelist" type="java.util.List&lt;java.lang.String&gt;"
    required="true" %>

태그를 호출하는 JSP 에서이 속성을 어떻게 만들 수 있습니까? 스크립트를 사용할 수 있습니다

<tags:list thelist='<%= java.util.Arrays.asList("blah","blah2") %>' />

그러나 표현 언어를 사용 하여이 작업을 수행하는 방법이 있습니까?

도움이 되었습니까?

해결책

목록을 작성하는 것만으로도 사용할 수 있습니다. [<jsp:useBean>][1] 원하는 범위에서 객체를 만들려면 :

<jsp:useBean id="thelist" scope="request" class="java.util.ArrayList" />

ArrayList에는 ARGS 생성자가 없기 때문에 작동합니다. 그러나 목록에는 아무것도 없습니다. 그리고 내가 아는 한, EL과 JSTL은 컬렉션에 항목을 추가하기위한 내장 메커니즘을 제공하지 않습니다. 둘 다 읽기 전용 액세스에 중점을 둡니다. 나는 당신이 an을 정의 할 수 있다고 생각합니다 EL 기능 매핑 가능합니다 add() 방법.

그러나 나는 당신이 JSP가 원하지 않는 일을하도록 강요하지 않는 것이 좋습니다. 이 경우 JSP 태그 파일을 사용하지 않고 Java에 실제 태그 핸들러를 작성해야 함을 의미합니다.

다른 팁

처럼 KDGREGRY가 말합니다, 당신은 이것을 할 수 있습니다 사용자 정의 태그 라이브러리 기능, 예쁘지는 않지만. 예를 들어, 다음과 같은 것 :

#{foo:add(foo:add(foo:add(foo:newList(), 'One'), 'Two'), 'Three')}

당신은 단지 예전의 한계가 가장 간단한 표현 언어.

콩과 같은 다른 메커니즘을 통해이 작업을 수행하는 것이 더 쉬울 것입니다.

스크립트 또는 못생긴 EL 기능을 피하려면 빌더를 사용하고 EL 통역사를 속일 수 있습니다.

...

<jsp:useBean id="listBuilder" class="com.example.ELListBuilder"/>

<ul>
  <c:forEach var="item" items="${listBuilder['red']['yellow']['green'].build}">
      <li>${item}</li>
  </c:forEach>
</ul>

...

여기에 예를 확인하십시오. https://gist.github.com/4581179

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top