Как получить элемент из атрибута String [] в теге JSTL / JSP - PullRequest
6 голосов
/ 16 августа 2011

В простой JSP я могу получить первый элемент по EL ${form.items[0]}, но в теге JSP это же выражение выдает следующее исключение:

javax.el.PropertyNotFoundException: не удалось найти свойство 0в классе java.lang.String

Значение ${form.items} равно [Ljava.lang.String;@315e5b60.

Код тега JSP:

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

Код JSP равен:

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

Может быть, я забыл тип атрибута или что-то еще?Почему способ доступа к значениям отличается в тегах JSP и JSP?

1 Ответ

13 голосов
/ 16 августа 2011

Вам необходимо указать исключенный тип атрибута пользовательского тега. По умолчанию это java.lang.String, и контейнер JSP приводит атрибут к строке, прежде чем передать его в тэг. Таким образом, он вызывает toString в вашем массиве String.

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

или

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

должен сделать свое дело. Если ни один не делает, используя

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

следует, но это менее понятно.

...