【问题标题】:Is there any good reason to use <rtexprvalue>false</rtexprvalue> in JSP tags?在 JSP 标记中使用 <rtexprvalue>false</rtexprvalue> 有什么好的理由吗?
【发布时间】:2011-02-01 23:13:57
【问题描述】:

是否有充分的理由禁止将 scriptlet 或 EL 表达式作为属性值插入?

假设我们有标签:

<tag>
    <name>mytag</name>
    <tag-class>org.apache.beehive.netui.tags.tree.Tree</tag-class>
    <attribute>
        <name>attr</name>
        <required>false</required>
        <rtexprvalue>false</rtexprvalue>
        <type>boolean</type>
    </attribute>
</tag>

什么是不允许以下内容的充分理由?

<my:mytag attr="${setting}" />

【问题讨论】:

    标签: java jsp jsp-tags


    【解决方案1】:

    我想说这主要是一种向后兼容的措施,就像为给定的 JSP 完全关闭 EL 的能力一样。

    也许标签库在 EL 之前就已经存在,并且出于自己的目的使用了特殊的语法 ${}。也许属性值经常采用包含文字 ${} 的值。

    如果没有这样的设置,则需要修改现有代码(在标记库或 JSP 中)以便在升级到最新版本的 Servlet 规范后仍然可以工作。

    【讨论】:

      【解决方案2】:

      可能存在不适合在运行时设置的属性(例如,id 引用标签本身)。您可能会想出一个场景,您真的希望 ${} 表示纯文本,或者在某种自定义上下文中手动评估任何 EL 内容。

      但我认为切换的真正原因是向后兼容性。自定义标记早于 JSP 对 EL 的内置支持;更改标记库下的定义以使${} 现在具有特殊含义可能会破坏现有模板对该标记的使用。为向后兼容默认为 rtexprvalue-false 更安全,并让 JSP 2.0 的新标记库指定他们想要新的行为。

      [是的。蒂洛所说的。 :-)]

      【讨论】:

        猜你喜欢
        • 2012-02-05
        • 1970-01-01
        • 1970-01-01
        • 2011-05-11
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        相关资源
        最近更新 更多