当前位置: 代码迷 >> Web前端 >> EL表达式的容易使用
  详细解决方案

EL表达式的容易使用

热度:161   发布时间:2012-10-30 16:13:36.0
EL表达式的简单使用

1EL简介

?

1)语法结构

    ${expression}


2[].运算符?

    EL 提供.[]两种运算符来存取数据。
????
  当要存取的属性名称中包含一些特殊字符,如.?等并非字母或数字的符号,就一定要使用 []
例如: ${user.my-name}应当改为${user["my-name"] } 如果要动态取值时,就可以用[]来做,而.无法做到动态取值,例如:${sessionScope.user[data]}data 是一个变量。


3)变量
???? EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
????
因为我们并没有指定哪一个范围的username,所以它会依序从PageRequestSessionApplication范围查找。
????
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null
????????
属性范围??????? EL中的名称???????????????? 解释
???????? page???????????? pageScope??????????????
表示页面范围的变量。
???????? request?????????requestScope?????????
表示请求对象的变量。
???????? session?????????sessionScope?????????
表示会话范围内的变量。
???????? application????applicationScope?????
表示应用范围的变量。

注意:任何由单引号或双引号限定的字符串。对于单引号、双引号和反斜杠,使用反斜杠字符作为转义序列。必须注意,如果在字符串两端使用双引号,则单引号不需要转义。


4)

1--EL表达式用${}表示,可用在所有的HTMLJSP标签中,作用是代替JSP页面中复杂的JAVA代码。


2--EL表达式可操作常量、变量和隐式对象。 最常用的隐式对象有${param}${paramValues}。其中${param}表示返回请求参数中单个字符串的值。${paramValues}表示返回请求参数的一组值。


3 --<%@ page isELIgnored="true"%> 表示是否禁用EL语言,true表示禁止.false表示不禁止。JSP2.0中默认的启用EL语言

4-- EL语言可显示逻辑表达式。如:

${true and false}结果是false????

关系表达式如${5>6} 结果是false????

算术表达式如 ${5+5} 结果是10


5--EL中的变量搜索范围是:page―>request―> session―> application??

点运算符(.)"[ ]"都是表示获取变量的值,区别是[ ]可以显示非词类的变量。

?

2EL隐含对象
1)
与范围有关的隐含对象
与范围有关的EL 隐含对象包含以下4个:pageScoperequestScopesessionScope applicationScope;它们基本上就和JSPpageContextrequestsessionapplication一样;在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得其他相关信息。
例如:我们要取得session中储存一个属性username的值,可以利用下列方法:
???? session.getAttribute("username")
取得username的值,
EL中则使用下列方法
???? ${sessionScope.username}
2)与输入有关的隐含对象
与输入有关的隐含对象有2个:paramparamValues,它们是EL中比较特别的隐含对象。
例如我们要取得用户的请求参数时,可以利用下列方法:
???? request.getParameter(String name)
???? request.getParameterValues(String name)
EL中则可以使用paramparamValues两者来取得数据。
???? ${param.name}
???? ${paramValues.name[index]}

?

3.其他隐含对象
1)
cookie
JSTL
并没有提供设定cookie的动作,
例:要取得cookie中有一个设定名称为username的值,可以使用${cookie.username} 来取得它。
2)headerheaderValues
header
储存用户浏览器和服务端用来沟通的数据
例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}
另外在极少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得这些值。
3)initParam
initParam
取得设定web站点的环境参数(Context)
例:一般的方法String userid = (String)application.getInitParameter("userid");
????
可以使用 ${initParam.userid}来取得名称为userid
4)pageContext
pageContext
取得其他有关用户要求或页面的详细信息。
???? ${pageContext.request.queryString}????????
取得请求的参数字符串
???? ${pageContext.request.requestURL}????????
取得请求的URL,但不包括请求之参数字符串
???? ${pageContext.request.contextPath}????????
服务的web application 的名称
???? ${pageContext.request.method}??????????????
取得HTTP 的方法(GETPOST)
???? ${pageContext.request.protocol}????????
取得使用的协议(HTTP/1.1HTTP/1.0)
???? ${pageContext.request.remoteUser}????????
取得用户名称
???? ${pageContext.request.remoteAddr }????????
取得用户的IP 地址
???? ${pageContext.session.new}????????????
判断session 是否为新的
???? ${pageContext.session.id}??????????????
取得session ID
???? ${pageContext.servletContext.serverInfo}??
取得主机端的服务信息
?

4、条件标签
1.算术运算符有五个:+-*/div%mod
2.
关系运算符有六个:==eq!=ne<lt>gt<=le>=ge
3.
逻辑运算符有三个:&&and||or!not
4.
其它运算符有三个:Empty运算符、条件运算符、()运算符
????
例:${empty param.name}${A?B:C}${A*(B+C)}

?

5JSP2.0EL扩展表达式语言的设置
有了JSP2.0,就可以使用EL扩展表达式了。对于一个单个JSP页面,你可以使用定义page指令来设置jsp页面是否支持EL。默认是支持EL(如果要页面不支持EL,请设置为isELIgnored=true;

< %@ page isELIgnored"true|false"%>?
对于整个JSP应用程序,要修改WEB.XML配置(tomcat5.0.16默认是支持EL);

<jsp-property-group>
<description>property group for JSPConfiguration.</description>
<display-name>JSPConfiguration</display-name>
<url-pattern>/jsp/*</url-pattern>
<el-ignored>true</el-ignored>
<page-encoding>GB2312</page-encoding>
<scripting-invalid>true</scripting-invalid>
<include-prelude>/include/prelude.jspf</include-prelude>
<include-coda>/include/coda.jspf</include-coda>
</jsp-property-group>

?
6JSP2.0中定义和使用函数

?1

表达式语言允许你定义可在表达式中调用的函数。函数必须作为public类中的public static方法编写。同时要将文件映射到TLD标志库文件中。
???? 为了说明函数的使用,我们举一个简单的例子,把两个数相加。首先要编写求两数之和的Java方法代码,如代码示例所示,这里定义了一个静态方法,它接收两个字符串参数,把它们解析成整数并返回它们的和。

示例文件:Compute.java

package com.itttop.test;??

import java.util.*;??

public class Compute {??

    public static int add(String x, String y) {??

        int a = 0;??

        int b = 0;??

    try {??

        a = Integer.parseInt(x);??

        b = Integer.parseInt(y);??

      }catch(Exception e) {}??

        return a + b;??

      }??

   }?


javac把这段代码编译成功后,下一步就要把函数的签名映射到标签库。

2)将方法映射到TLD表中
配置标记库描述文件,函数描述符

< function>??

    < description>add x and y< /description>??

    < name>add< /name>??

    < function-class>com.itttop.test.Compute < /function-class>??

    < function-signature>int add(java.lang.String,java.lang.String) < /function-signature>??

< /function>??

现在我们就可以编写一个JSP页面来使用这个函数。下面的代码示例是包含两个字段的一个表单,用户输入两个数字并按下求和按钮,就会调用上面的函数并把两个数相加,结果在同一个页面中显示出来。

3)在JSP页面中调用要引用的Taglib标记,然后就可以在jsp页面中访问了。

代码示例: math.jsp

< %@ taglib prefix="my"? uri="http://jakarta.apache.org/tomcat/jsp2-example-taglib %>??

< HTML>?

    < HEAD>??

        < TITLE>Functions< /TITLE>??

    < /HEAD>??

    < BODY>??

        < H3>Add Numbers< /H3>??

        < P>??

        < FORM action="math.jsp" method="GET">??

        X = < input type="text" name="x" value="${param['x']}">??

        < BR>??

        Y = < input type="text" name="y" value="${param['y']}">??

        < input type="submit" value="Add Numbers">??

        < /FORM>??

        < P>??

        The sum is: ${my:add(param['x'],param['y'])}??

    < /BODY>??

< /HTML>?

?

?

  相关解决方案