【问题标题】:JSP : JSTL's <c:out> tagJSP:JSTL 的 <c:out> 标签
【发布时间】:2010-09-22 09:44:26
【问题描述】:

写一个JSP页面,&lt;c:out&gt;到底是做什么的?我注意到以下两者具有相同的结果:

<p>The person's name is <c:out value="${person.name}" /></p>
<p>The person's name is ${person.name}</p>

【问题讨论】:

    标签: java jsp jstl tags


    【解决方案1】:

    c:out 转义 HTML 字符,以便您避免跨站点脚本。

    如果person.name = &lt;script&gt;alert("Yo")&lt;/script&gt;

    脚本将在第二种情况下执行,但在使用c:out时不会执行

    【讨论】:

    • 仅当 'escapeXML' 设置为 true(不确定是否为默认值)
    • 我相信默认是真的。
    • 注:它转义 XML 而不是 HTML。 JSTL 更令人讨厌的细微之处之一。我最终总是编写自己的 HTML 转义 EL fn。
    • 属性名区分大小写,所以是 escapeXml="true" 而不是 escapeXML
    • 我不知道这个答案的代码示例显示了什么 - 有人可以澄清一下吗?它提到了“第二种情况”,但我没有看到,也没有看到代码中使用了 c:out。
    【解决方案2】:

    正如 Will Wagner 所说,在旧版本的 jsp 中,您应该始终使用 c:out 来输出动态文本。

    此外,使用以下语法:

    <c:out value="${person.name}">No name</c:out>
    

    name 为空时可以显示文本“No name”。

    【讨论】:

    • 酷!我不知道。
    • 同意,很酷。感谢您的教导和帮助。我也不知道。干杯!
    • JSR 52,维护版本 2,参见第 22 页“带有正文”。链接:download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
    • @Barett。凉爽的。我想知道为什么这从来没有制作任何教程或示例。比默认属性 IMO 更方便的语法。
    【解决方案3】:

    c:out 还具有一个属性,用于在 person.name 的值恰好为 null 时分配默认值。

    来源:out (TLDDoc Generated Documentation)

    【讨论】:

      【解决方案4】:

      您可以通过使用属性 escapeXml 值等于 true 来显式启用 Xml 实体的转义。仅供参考,默认情况下为“true”。

      【讨论】:

      • 一些示例代码确实有助于完成这个答案。
      【解决方案5】:

      旧版本的 JSP 不支持第二种语法。

      【讨论】:

        猜你喜欢
        • 2012-01-14
        • 1970-01-01
        • 1970-01-01
        • 2013-09-20
        • 2014-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多