2

在 Java 统一表达式语言中有两种基本类型的 EL 语法:

${expression for immediate evaluation}
#{expression for deferred evaluation}

我在 JaveServer Faces 中理解这两者之间的区别:JSF 有一种变化的生命周期的感觉,即时表达式总是在页面渲染时评估,而延迟表达式可以在页面渲染、回发或两者兼而有之时评估。

但是,对于 JavaServer Pages,我并不清楚区别。据我所知,JSP 没有 JSF 所具有的生命周期意识。事实上,当得知延迟语法在 JSP 中甚至是合法的时,我有些惊讶。但是,我现在知道确实如此,因为<jsp-config>部署描述符中提供了向后兼容性设置,以禁用对将该语法用于其他目的的 pre-JUEL JSP 的延迟语法检测:

<deferred-syntax-allowed-as-literal>

所以,问题是,有什么区别?延迟语法在 JSP 中的含义显然与在 JSF 中的含义不完全相同,但是我在任何地方都找不到任何描述如何为 JSP 使用延迟语法的文档。

它们只是 JSP 中的同义词吗?

4

1 回答 1

2

我在其他论坛上找到的,希望对你有帮助。

查看 JSP2.1 规范的前言部分。延迟表达式仅真正适用于您已指定延迟属性的自定义标记。在大多数情况下,我不理会他们。

基本上如果你在模板文本中使用#{deferredSyntax},它会触发一个翻译错误(它们在标签属性之外没有意义)

如果在标签属性中使用#{deferredSyntax},它取决于标签库支持的JSP 版本的tld 声明。- 支持的 JSP 版本 < 2.1 == 视为文字 - 支持的 JSP 版本 >= 2.1 :视为延迟属性 - 只要它被标记为这样。

您可以设置页面属性:

<%@page deferredSyntaxAllowedAsLiteral="true"%> 
于 2013-02-11T03:41:36.770 回答