在普通的JSP中,我可以通过EL ${form.items [0]}获得第一个项目,但是在JSP标记中,同一个表达式会抛出以下异常: javax.el.PropertyNotFoundException: Could not find property 0 in class java.lang.String ${form.item
javax.el.PropertyNotFoundException: Could not find property 0 in class
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标记中访问值的方式不同?
您需要指定自定义标记属性的已扩展类型.默认情况下,它是java.lang.String,并且JSP容器在将属性传递给标记之前将该属性强制转换为字符串.因此它调用String数组上的toString.<%@ 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" %>
应该,但不太清楚.