2011-08-16 19 views
6

En la llanura JSP puedo conseguir el primer artículo de EL ${form.items[0]}, pero en una etiqueta JSP la misma expresión arroja la siguiente excepción:Cómo obtener un elemento de la [] atributo de cadena en JSTL tag/JSP

javax.el.PropertyNotFoundException: no se pudo encontrar en la clase 0 java.lang.String

El valor de ${form.items} es [Ljava.lang.String;@315e5b60.

JSP código de la etiqueta es:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ attribute name="items" required="true" %> 
${items[0]} 

código JSP es:

<%@ taglib prefix="t" tagdir="/WEB-INF/tags"%> 
<t:input items="${form.items}"></t:input> 

Tal vez olvidó tipo de atributo o alguna otra cosa? ¿Por qué la forma de acceder a los valores es diferente en las etiquetas JSP y JSP?

Respuesta

13

Debe especificar el tipo generado del atributo de etiqueta personalizada. Por defecto, es java.lang.String, y el contenedor JSP coacciona el atributo a una cadena antes de pasarlo a su etiqueta. Llama así a String en tu matriz String.

<%@ attribute name="items" required="true" type="java.lang.String[]" %> 

o

<%@ attribute name="items" required="true" type="[Ljava.lang.String" %> 

debe hacer el truco. Si ninguno lo hace, usando

<%@ attribute name="items" required="true" type="java.lang.Object" %> 

debería, pero está menos claro.

+0

Gracias, la primera solución funciona (tipo = "java.lang.String []"). Segundo: no funciona, lo intenté antes. –

+0

El uso de java.lang.Object permite que la etiqueta obtenga ambas matrices y java.util.List. Eso puede ser útil en algunos casos también. – marcus

Cuestiones relacionadas