【问题标题】:How to use JSTL <c:forEach> with Struts2 <s:url>?如何将 JSTL <c:forEach> 与 Struts2 <s:url> 一起使用?
【发布时间】:2023-03-28 15:14:01
【问题描述】:

我有这段代码确实有效:

<s:iterator value="breadcrumb.links" var="link">
    <s:url action='%{#link.url}' var="url" />
    <li>
       <a href="${url}">${link.name}</a>
    </li>
</s:iterator>

我如何做同样的事情,但使用 c:foreach 而不是 s:iterator ?

我试过了:

<c:forEach items="${breadcrumb.links}" var="link">
    <s:url action='${link.url}' var="url" />
    <li>
        <a href="${url}">${link.name}</a>
    </li>
</c:forEach>

但我得到了错误:

根据标记文件中的 TLD 或属性指令,属性操作不接受任何表达式

谢谢。

【问题讨论】:

  • 除了这个问题,你为什么要这么做?
  • 因为我对 struts 标签 s:iterator 和 OGNL %{#} 感到不舒服。我想坚持使用 JSTL c:foreach 和 EL ${}。此外,我总是读到 EL 和 OGNL 可以做同样的事情,只是方式不同。但在这种情况下,我找不到 EL 的方法。
  • 今晚我会试试你的代码并发布结果,谢谢。

标签: jsp struts2 iterator jstl ognl


【解决方案1】:

为了更熟悉 Struts2 标签和 OGNL 语言,read and bookmark this answer

由于 Struts2 标记仅评估 OGNL 表达式(and not EL Expression,正如您清楚地指出的错误),您需要通过 var 指定的 PageContext 属性(在 OGNL 中 #attr.something)访问 JSTL 对象:

<c:forEach items="${breadcrumb.links}" var="link">
    <s:url action='%{#attr.link.url}' var="url" />
    <li>
        <a href="${url}">${link.name}</a>
    </li>
</c:forEach>

来自OGNL Basics

#attr['foo']#attr.foo : 访问PageContext 如果可用,否则搜索 request/session/application分别

【讨论】:

  • 谢谢,它按预期工作。我还阅读了一些关于 OGNL 的文档,现在它更清晰了。也许我会切换到 struts2 标签 + OGNL。 Grazie Mille。
  • 很高兴有帮助,prego :]
猜你喜欢
  • 2013-01-08
  • 2021-03-30
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
  • 2020-08-23
  • 1970-01-01
  • 2012-08-15
相关资源
最近更新 更多