EL表达式

EL表达式
1、EL简介
1)语法结构
expression2[].EL.[].?使[] {user.My-Name}应当改为 user[MyName][]. {sessionScope.user[data]}中data 是一个变量
3)变量
EL存取变量数据的方法很简单,例如: usernameusernameusernamePageRequestSessionApplicationusernamenullELPagePageScopeRequestRequestScopeSessionSessionScopeApplicationApplicationScope4)1EL {}表示,可用在所有的HTML和JSP标签中作用是代替JSP页面中复杂的JAVA代码.
2–EL表达式可操作常量 变量 和隐式对象. 最常用的 隐式对象有 param {paramValues}.
param. {paramValues}表示返回请求参数的一组
值.pageScope表示页面范围的变量.requestScope表示请求对象的变量. sessionScope表示会话
范围内的变量.applicationScope表示应用范围的变量.
3 –<%@ page isELIgnored=”true”%> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁
止.JSP2.0中默认的启用EL语言.
4– EL语言可显示 逻辑表达式如 trueandfalsefalse {5>6} 结
果是false 算术表达式如 ${5+5} 结果是10
5–EL中的变量搜索范围是:page request session application 点运算符(.)和”[ ]”都是
表示获取变量的值.区别是[ ]可以显示非词类的变量

2、EL隐含对象
1)与范围有关的隐含对象
与范围有关的EL 隐含对象包含以下四个:pageScope、requestScope、sessionScope 和
applicationScope;
它们基本上就和JSP的pageContext、request、session和application一样;
在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得
其他相关信息。
例如:我们要取得session中储存一个属性username的值,可以利用下列方法:
session.getAttribute(“username”) 取得username的值,
在EL中则使用下列方法
sessionScope.username2)paramparamValuesELrequest.getParameter(Stringname)request.getParameterValues(Stringname)EL使paramparamValues {param.name}
${paramValues.name}

3.其他隐含对象
1)cookie
JSTL并没有提供设定cookie的动作,
例:要取得cookie中有一个设定名称为userCountry的值,可以使用 cookie.userCountry2)headerheaderValuesheader使 {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 的方法(GET、POST)
      ${pageContext.request.protocol}         取得使用的协议(HTTP/1.1、HTTP/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)}
5) EL函数(functions)
语法:ns:function( arg1, arg2, arg3 …. argN)
其中ns为前置名称(prefix),它必须和taglib 指令的前置名称一置
6) 补充:

 <%@ taglib prefix="c" http://java.sun.com/jstl/core_rt">http://java.sun.com/jstl/core_rt" %>
 FOREACH:
 <c:forEach items="${messages}"
 var="item"
 begin="0"
 end="9"
 step="1"
 varStatus="var">
 ……


OUT:

c:out>将value 中的内容输出到当前位置,这里也就是把logininfo 对象的
username属性值输出到页面当前位置。
JSP2.0ExpressionLanguageELforEach? {logininfo.username}
这表明引用logininfo 对象的username 属性。我们可以通过“.”操作符引
用对象的属性,也可以用“[]”引用对象属性,如 logininfo[username] {logininfo.username}达到了同样的效果。
“[]”引用方式的意义在于,如果属性名中出现了特殊字符,如“.”或者“-”,
此时就必须使用“[]”获取属性值以避免语法上的冲突(系统开发时应尽量避免
这一现象的出现)。
与之等同的JSP Script大致如下:
LoginInfo logininfo =
(LoginInfo)session.getAttribute(“logininfo”);
String username = logininfo.getUsername();
可以看到,EL大大节省了编码量。
这里引出的另外一个问题就是,EL 将从哪里找到logininfo 对象,对于
logininfo.usernamelogininfoRequestSessionApplicationnull.EL {pageScope.logininfo.username}
requestScope.logininfo.username {sessionScope.logininfo.username}
applicationScope.logininfo.usernameSpringAttributeHttpServletRequestSpringorg.springframework.web.servlet.view.InternalResourceView.exposeModelAsRequestAttributesSpringMVCrequestScopeSpringMVC {sessionScope.logininfo.username}
applicationScope.logininfo.username? {1+2}
结果为表达式计算结果,即整数值3。
? ${i>1}
如果变量值i>1的话,将返回bool类型true。与上例比较,可以发现EL会自
动根据表达式计算结果返回不同的数据类型。
表达式的写法与java代码中的表达式编写方式大致相同。
IF / CHOOSE:

*

判定条件一般为一个EL表达式。
并没有提供else子句,使用的时候可能有些不便,此时我们可以通过
tag来达到类似的

*


!

Java 中的switch 语句,提供了复杂判定条件下的简化处理手法。其
中子句类似case子句,可以出现多次。上面的代码,在奇数行时输出“*”号,
而偶数行时输出“!”。
经验:1、如果EL表达式无法解析:– <%@ page isELIgnored=”false” %>

一、 JSTL

1、EL运算符>;
2)var指定变量,并把EL运算结果赋值给该变量值为true/false;
3)scope:指定 var变量的范围;

6、迭代标签
语法:

<c:choose>
 <c:when test="">
 user.generous is true.
 </c:when>
 <c:when test="">
 user.stingy is true.
 </c:when>
 <c:otherwise>
 user.generous and user.stingy are false.
 </c:otherwise>
 </c:choose>

说明:只有当条件user.generous返回值是true时,才显示user.generous is true.
只有当条件user.stingy返回值是true时,才显示user.stingy is true.
其它所有的情况(即user.generous和user.stingy的值都不为true)全部显示user.generous and
user.stingy are false.
由于JSTL没有形如if (){…} else {…}的条件语句,所以这种形式的语句只能用、
和标签共同来完成了。
8、c:forTokens>标签
说明:
items 进行循环的项目 是 无
delims 分割符 是 无
begin 开始条件 否 0
end 结束条件 否 集合中的最后一个项目
step 步长 否 1
var 代表当前项目的变量名 否 无
varStatus 显示循环状态的变量 否 无
例子:



这个标签的使用相当于java.util.StringTokenizer类。在这里将字符串a:b:c:d以:分开循环四次,
token是循环到当前分割到的字符串。
9、标签
说明:标签将请求重新定向到另外一个页面,它有以下属性 属性 描 述 是否必须 缺省值
url url地址 是 无
context /后跟本地web应用程序的名字 否 当前应用程序
例子:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值