2011-08-16 6 views
6

In pianura JSP posso ottenere prima voce da EL ${form.items[0]}, ma in un tag JSP la stessa espressione getta la seguente eccezione:Come ottenere un elemento dalla [] attributo String in JSTL tag/JSP

javax.el.PropertyNotFoundException: Impossibile trovare immobili 0 in classe java.lang.String

Il valore di ${form.items} è [Ljava.lang.String;@315e5b60.

JSP codice tag è:

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

codice JSP è:

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

Forse ho dimenticato tipo di attributo o qualcos'altro? Perché è il modo di accedere a valori diversi nei tag JSP e JSP?

risposta

13

È necessario specificare il tipo di expeded dell'attributo tag personalizzato. Per impostazione predefinita, è java.lang.String e il contenitore JSP costringe l'attributo a una stringa prima di passarlo al tag. Chiama quindi toString sul tuo array di stringhe.

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

o

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

dovrebbe fare il trucco. In caso contrario, utilizzare

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

dovrebbe, ma è meno chiaro.

+0

Grazie, la prima soluzione funziona (type = "java.lang.String []"). Secondo: non funziona, l'ho provato prima. –

+0

L'utilizzo di java.lang.Object consente al tag di ottenere sia gli array che java.util.List. Potrebbe essere utile anche in alcuni casi. – marcus