2011-08-16 12 views
6

W zwykłym JSP mogę zdobyć pierwszą pozycję EL ${form.items[0]}, ale w tagu JSP to samo wyrażenie rzuca następujący wyjątek:Jak zdobyć pozycję z [] atrybutu String w JSTL tagu/JSP

javax.el.PropertyNotFoundException: nie można odnaleźć własności 0 w klasie java.lang.String

wartość ${form.items} jest [Ljava.lang.String;@315e5b60.

kodu JSP tag to:

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

kodu JSP jest:

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

Może zapomniałem typ atrybutu lub coś innego? Dlaczego sposób dostępu do wartości różni się w JSP i tag JSP?

Odpowiedz

13

Należy określić rodzaj przyspieszonego atrybutu niestandardowego znacznika. Domyślnie jest to java.lang.String, a kontener JSP wymusza na nim atrybut przed przekazaniem go do tagu. W ten sposób wywołujeString na twojej tablicy String.

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

lub

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

powinno załatwić sprawę. Jeśli nie, należy użyć, ale jest mniej jasne.

+0

Dzięki, pierwsze rozwiązanie działa (type = "java.lang.String []"). Po drugie - nie działa, próbowałem go wcześniej. –

+0

Użycie java.lang.Object pozwala znacznikowi uzyskać zarówno tablice, jak i java.util.List. To może być przydatne w niektórych przypadkach. – marcus