Pregunta

Supongamos que tengo una etiqueta personalizada que toma una Lista de cadenas:

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

¿Cómo puedo crear este atributo en el jsp que llama a la etiqueta? Podría usar un scriptlet

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

pero, ¿hay alguna forma de hacerlo utilizando Expression Language, ya que parece preferible?

¿Fue útil?

Solución

Si todo lo que quiere hacer es crear la lista, puede usar [<jsp:useBean>][1] para crear el objeto en el ámbito deseado:

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

Esto funciona porque ArrayList tiene un constructor sin argumentos. Sin embargo, la lista no tendrá nada en ella. Y, que yo sepa, ni EL ni JSTL proporcionan un mecanismo incorporado para agregar elementos a una colección; ambos están enfocados en el acceso de solo lectura. Supongo que podría definir un mapeo de funciones EL para habilitar el método add().

Sin embargo, creo que es mejor que no intentes forzar a JSP a hacer algo que no quiere hacer. En este caso, eso significa que, en lugar de utilizar un archivo de etiquetas JSP, debe escribir un controlador de etiquetas real en Java.

Otros consejos

Como kdgregory dice , puede hacer esto con funciones de biblioteca de etiquetas personalizadas , aunque no lo hará se bonita Por ejemplo, algo como esto:

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

Simplemente se encuentra con las limitaciones de lo que solía llamarse El lenguaje de expresión más simple posible .

Sería más fácil hacer esto a través de algún otro mecanismo, como un bean.

Si desea evitar scriptlet o funciones EL feas, puede usar su propio generador y engañar al intérprete 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>

...

Verifique el ejemplo aquí: https://gist.github.com/4581179

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top