【问题标题】:How to get an item from the String[] attribute in JSTL/JSP tag如何从 JSTL/JSP 标记中的 String[] 属性中获取项目
【发布时间】:2011-10-28 00:58:59
【问题描述】:

在纯 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标签的取值方式不同?

【问题讨论】:

    标签: java jsp el jsp-tags


    【解决方案1】:

    您需要指定自定义标签属性的加速类型。默认情况下,它是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" %>
    

    应该,但不太清楚。

    【讨论】:

    • 谢谢,第一个解决方案有效(type="java.lang.String[]")。第二个 - 不起作用,我之前尝试过。
    • 使用 java.lang.Object 允许标签获取数组和 java.util.List。这在某些情况下也可能有用。
    猜你喜欢
    • 1970-01-01
    • 2016-03-03
    • 2014-11-25
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2013-11-18
    相关资源
    最近更新 更多