如何从JSTL/JSP标记中的String []属性获取项目

tim*_*nov 6 java jsp jsp-tags el

在普通的JSP中,我可以通过EL获得第一个项目${form.items[0]},但是在JSP标记中,同一个表达式会引发以下异常:

javax.el.PropertyNotFoundException:无法在类java.lang.String中找到属性0

价值${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]}
Run Code Online (Sandbox Code Playgroud)

JSP代码是:

<%@ taglib prefix="t" tagdir="/WEB-INF/tags"%>
<t:input items="${form.items}"></t:input>
Run Code Online (Sandbox Code Playgroud)

也许我忘记了属性的类型或其他东西?为什么在JSP和JSP标记中访问值的方式不同?

JB *_*zet 14

您需要指定自定义标记属性的已扩展类型.默认情况下,它是java.lang.String,并且JSP容器在将属性传递给标记之前将该属性强制转换为字符串.因此它调用String数组上的toString.

<%@ attribute name="items" required="true" type="java.lang.String[]" %>
Run Code Online (Sandbox Code Playgroud)

要么

<%@ attribute name="items" required="true" type="[Ljava.lang.String" %>
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.如果两者都没有,使用

<%@ attribute name="items" required="true" type="java.lang.Object" %>
Run Code Online (Sandbox Code Playgroud)

应该,但不太清楚.