在普通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标记中访问值的方式不同?
答案 0 :(得分:13)
您需要指定自定义标记属性的已过滤类型。默认情况下,它是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" %>
应该,但不太清楚。