【问题标题】:expression language - header value is null [duplicate]表达式语言 - 标头值为空 [重复]
【发布时间】:2024-04-22 00:00:02
【问题描述】:

在使用表达式语言的 .jsp 页面中,我想检索所有标题名称及其值。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<table>
    <tr>
        <th>Name</th>
        <th>Value</th>
    </tr>
    <c:forEach items="${pageContext.request.headerNames}" var="item">
    <tr>
        <td>${item}</td>
        <td>${header["${item}"]}</td>
    </tr>
    </c:forEach>
</table>

标题是据我所知的地图

  • 在 JavaBean 中指定属性或在地图中指定 时需要使用引号

但是 &lt;td&gt;${header["${item}"]}&lt;/td&gt; 返回 null,即使 &lt;td&gt;${item}&lt;/td&gt; 返回标题名称。

【问题讨论】:

  • 这不是那个的复制品。

标签: jsp foreach el


【解决方案1】:
<td>${header["${item}"]}</td>

应该是

<td>${header[item]}</td>

您也可以在 jstl 中使用隐式标头对象

<c:forEach items = "header" var = "h">

Header Name ${h.key}
Header Value ${h.value}

</c:forEach>

【讨论】:

  • 在我的示例中没有引号 = 无法解析表达式 [${header[${item}]}] 但它就像一个魅力来遍历标头对象并获取键和值.
  • 请仔细看:),该项目没有'$'或'{'包围它。它只是简单的[项目]
  • 我现在看到了,看这个太久了 xD 我试过了,但我得到一个 javax.servlet.jsp.el.ImplicitObjectELResolver$ScopeMap$ScopeEntry cannot be cast to java.lang.String --- ${header[item]}
  • 哇哦,它是一个 Map.Entry。也许您应该尝试使用 item.key 代替 item。抱歉,我没有工作环境可以试用
  • 比它有效:)
最近更新 更多