Java for Web学习笔记(二一):EL(1)什么是EL

来源:互联网 发布:如何才能避免淘宝同款 编辑:程序博客网 时间:2024/05/16 17:48

使用jsp,它的能力太大需要注意安全,同时对于UI编程人员也过于复杂,可以使用EL(Expression Language)解决这些问题。最初作为JSTL的一部分,后来分离出来作为JSP的一部分,作为Java Unified Expression Language(JUEL)提供给JSP和JSF(Java Server Faces)。在Java EE 7时移到自己的JSR(JSR 341)(JSR是Java Specification Requests的缩写,意思是Java 规范提案。From :百度百科JSR)

EL是什么

EL解析器需要知道在JSP中EL的开始和结束,有两种基本的EL语法:immediate evaluation(即时求值)和deferred evaluation(延后求值)。

Immediate Evaluation

顾名思义,JSP引擎在页面渲染是满足对其进行解释和求值,由于是从上到下顺序解析,解析到时,就要获值。

${expr},其中expr 是EL表达式。

这是EL的基本语法,如果我们需要在JSP中需要有类似的页面显示,又不误认为是EL,写成:\${not an EL expression}或者${not an EL expression}

如果在JSP中,例如在HTML中要在EL前面有个\,那么可以:\${EL expression to evaluate}

Deferred Evaluation

Defferred Evalution是Unified Expression Language,主要用在JSF,很少用在JSP,虽然语法是有效的。

#{expr}

在JSF中,defferred evaluation是在页面渲染或/和在postback(回传)时获值,但在JSP中由于没有JSF的生命周期,方式是不一样的。在JSP中#{}只在JSP tag的属性中有效,延后获值至对tag的渲染,也就是tag的属性一开始并不确值,而是后面唤起方法来获值,最晚也需在tag内完成。这在JSP中很少使用。

同样,为了避免歧义,如果不是EL表达式,应该使用:

\#{not an EL expression}或者#{also not an EL expression}

然而,对于#{}仍可能有不识别的情况,我们可以在web.xml的<jsp-config>中的<jsp-property-group>中定义:

<deferred-syntax-allowed-as-literal>true</deferred-syntax-allowed-as-literal>

如果不进行全局定义,可以在jsp文件中在page属性里加上:

deferredSyntaxAllowedAsLiteral="true"

Deffered Evaluation将不在本章中涉及,实际上也很少使用。

位置

EL可以在jsp文件的任何位置,除了JSP的declarations、directives、scriptlets、expressions。

例如在HTML文本和HTML的tag属性中:

The user will see ${expr} text and will know that${expr} is good.
<input type="text" name="something" value="${expr}" />

例如在JSP的tag属性中:

<c:url value="/something/${expr}/${expr}" />
<c:redirect url="${expr}" />

例如在JavaScript或CSS(Cascading Style Sheets)中:

<script type="text/javascript" lang="javascript">
var employeeName = '${expr}';
var booleanValue = ${expr};
var numericValue = ${expr};
</script>
<style type="text/css">
    span.error {
        color:${expr};
        background-image: url('/some/place/${expr}.png');
    }
</style>

相关链接: 我的Professional Java for Web Applications相关文章

0 0
原创粉丝点击