在Java Unified Expression Language中,有两种基本类型的EL语法:
${expression for immediate evaluation}
#{expression for deferred evaluation}
我理解JaveServer Faces中这两者之间的区别:JSF具有不同生命周期的感觉,并且总是在页面渲染时评估直接表达式,而延迟表达式可以在页面渲染,回发或两者中进行评估。 / p>
然而,JavaServer Pages对我来说并不清楚。从我所知道的,JSP没有JSF所具有的生命周期感。事实上,我有点惊讶地发现延迟语法在JSP中甚至是合法的。但是,我现在知道它是,因为部署描述符中提供了向后兼容性<jsp-config>
设置,以禁止检测使用该语法用于其他目的的前JUEL JSP的延迟语法:
<deferred-syntax-allowed-as-literal>
所以,问题是,有什么区别?延迟语法显然不能在JSP中表示与JSF中完全相同的东西,但我找不到任何描述如何使用JSP的延迟语法的文档。
它们只是JSP中的同义词吗?
答案 0 :(得分:2)
我是从其他论坛发现的,我希望它有所帮助。
查看JSP2.1规范的前言部分。 延迟表达式仅适用于已指定属性延迟的自定义标记。 在大多数情况下,我不打扰他们。
基本上 如果在模板文本中使用#{deferredSyntax},则会触发转换错误(它们在标记属性之外没有意义)
如果在标记属性中使用#{deferredSyntax},则它取决于taglib支持的JSP版本的tld声明。 - 支持JSP版本&lt; 2.1 ==视为文字 - 支持JSP版本&gt; = 2.1:视为延迟属性 - 只要它被标记为这样。
您可以设置页面属性:
<%@page deferredSyntaxAllowedAsLiteral="true"%>