JSP EL语言定义
EL(Expression Language)目的:为了使JSP写起来更加简单。 表达式语言灵感来自于ECMAScript和XPath表达式语言,它是一种简单的语言,基于可用的命名空间(PageContext属性),嵌套属性和对集合,操作符(算术型,关系型和逻辑型)的访问符,映射到java类中静态方法的可扩展函数以及一组隐式对象。
语法结构:${expression}
[]与.运算符
EL提供"."和"[]"两种运算符存取数据。当要存取的属性名称中包括一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用"[]"。例如:
${user.My-Name}应当改为${user["My-Name"] }
在这里user是一个类的对象,它的属性My-Name必须符合标准JavaBean的规范,即必须为My-Name属性定义相应的getter、setter方法。
${userAction.person.name}表示取userAction中person对象的name属性值,所以person要在userAction中有set/get方法,name在person中也要有set/get方法。
集合(数组,List)
表达式${row[0]} 表明row集合的第一个条目。
如:${ data.arrayobj[0] }表示取data对象中arrayObj集合的第一个元素。
如果要动态取值时,就可以用“[]“来做,而“.“无法做到动态取值。例如:
${sessionScope.user[data]}中data 是一个变量(在sesssion范围内取)
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
EL表达式不要使用param作为属性名,如${param}得到的是javax.servlet.jsp.el.ImplicitObjectELResolver$ImplicitObjects$5@1a40210而不是param属性对应的值。
${param.参数名}的用法:
例如:向被包含的页included2.jsp传递参数:
page属性: 相对路径指明被包含的文件
flush属性: 必须用true ,表示页面可刷新。
可以用jsp:param向被包含的动态页即JSP页传递参数(而include指令则不可以),参数以”参数名-值”对的形式传递,被包含的页使用request.getParameter(“参数名称”)可以获取相应参数的值
在included2.jsp通过EL表达式 : $(param.ref1) 相当于 request.getParameter("ref1")取出ref1的值。
request.getParameter();一般是从页面或者客户端获取的内容,
而 request.getAttribute();一般是从服务器段传过来的,可以传到客户端也可以传到服务器里面(即,方法1传到方法2,服务器内部的传输)
表达式 : $(param.name) 相当于 request.getParameter (name)。
Map对象
Map map=new HashMap();
map.put("my", "11mymymy");
map.put("my1", "22mymymy1");
request.setAttribute("map",map);
EL表达式输出:${map.my1}结果为,22mymymy1。
判断对象是否为null
Empty操作符(空值检查)
使用empty操作符来决定对象、集合或字符串变量是否为空或null。例如:
${empty para.username}
如果request的参数列表中的username值为null,则表达式的值为true。 EL也可以直接使用比较操作符与null进行比较。如${para.firstname == null}。
//判断是否等于字符串'产品管理'
产品管理
比较操作符 描述
==或eq 相等检查
!=或ne 不等检查
<或lt 小于检查
>或gt 大于检查
<=或le 小于等于检查
>=或ge 大于等于检查
算术运算符(+、-(二元)、*、/、div、%、mod)与逻辑运算符均(and、&&、or、||、!、not)与JAVA语言相同,不再列表。
条件运算符 ?=
${A?B:C } 如果A 为true 则返回B 否则返回 C
例如:
选项一
选项二
1+2: ${1+2 }
10/5: ${10/5 }
10 div 5: ${10 div 5 }
10%3: ${10 % 3 }
10 mod 3: ${10 mod 3 }
属性范围在EL中的名称:
Page pageScope
Request requestScope
Session sessionScope
Application applicationScope
<%=request.getParameter("username")% > 等价于${ para.username }。para:将请求参数名称映射到单个字符串参数值。
EL语言可以完成如果得到一个username为空,则不显示null,而是不显示值。
${paramValues}表示返回请求参数的一组值。等同于<%=request.getParameterValues("sampleValue")};
例如:
sampleJsp.jsp 的中有
${paramValues.sampleValue[2]}
${para.sampleSingleValue }
显示结果为12 SingleValue
<%=user.getAddr( ) %> 等价于 ${user.addr}。
使用EL表达式取值时,如果取出的值带有html标记,则html标记会被解释。
注意 <%@ page isELIgnored="true" %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言。
EL表达式不能和struts标签嵌套使用。
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} 取得主机端的服务信息
${pageContext.request.contextPath}取得项目的根目录,相当于<%request.getContextPath()%>
如果使用EL表达式出现下面的异常,则需要将jsp-api.jar放在WEB-INF/lib下,然后重新保存文件既可以了
javax.servlet.jsp.pagecontext cantnot be resolved to a type
**************************
C标签
需要导入的jar包:jstl.jar和standard.jar
需要的标签库:<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
标签是一个最常用的标签,用于在JSP中显示数据。它的作用是用来替代通过JSP内置对象out或者<%=%>标签来输出对象的值。如:
default属性,假若value为null,会显示default的值;假若没有设定default的值,则会显示一个空的字符串。
标签用于为变量(page,request,session,application)赋值或对javaBean中变量的属性进行赋值。
将value的值存储到范围为scope的varName变量之中(默认scope的值为page):
将body内容存储至范围为scope的varName变量之中:
body.....
将value的值存储至target对象属性中
将body内容的数据存储至target对象属性中
body....
如:
标签用于删除存在于scope中的变量。
如:
仅当所指定的表达式计算为true时才执行其体内的语句。计算结果也可以保存为一个变量中。
没有体,将计算结果保存在var变量中:
有体:
JSP elements ...
例如:
登录失败
和,一起实现互斥条件执行,类似于java中的if else。一般作为和的父标签:
小于10000
大于等于10000,小于等于20000
其它
主要用于对集合进行迭代。
JSP elements
例如:
${athes.authority}
另外迭代固定的次数:
JSP elements
例如:
${st}//将输出3次
begin,开始位置。end,结束位置。items,被迭代的集合对象(Collection,Iterator,Map,Enumeration,数组)
step,步长(每次迭代时索引的递增值默认是1)
var,保存当前值。
varStatus:迭代变量的名称,用来表示迭代的状态,可以访问到迭代自身的信息。该变量包含的属性如下:
current:当前这次迭代的(集合中的)项。
index:当前这次迭代从0开始的迭代索引。
count:当前这次迭代从1开始的迭代计数。
first:用来表明当前这轮迭代是否为第一次迭代,该属性为boolean类型。
last:用来表明当前这轮迭代是否为最后一次迭代,该属性为boolean类型。
begin:begin属性的值。
end:end属性的值
step:step属性的值
遍历数组
<% String[] words = { "foo", "bar", "baz"};
pageContext.setAttribute("words", words);
%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
Key Words:
***************************
EL表达式函数
下面是JSTL中自带的方法列表以及其描述
需要写上的标签库:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
需要导入的jar包:jstl.jar和standard.jar
fn:contains(string, substring)
如果参数string中包含参数substring,返回true
fn:containsIgnoreCase(string, substring)
如果参数string中包含参数substring(忽略大小写),返回true
fn:endsWith(string, suffix)
如果参数 string 以参数suffix结尾,返回true。如:
fn:escapeXml(string)
将有特殊意义的XML (和HTML)转换为对应的XML character entity code,并返回。如< ${fn:escapeXml(para:info)}
fn:indexOf(string, substring)
返回参数substring在参数string中第一次出现的位置。如:${fn:indexOf(name, "-")}
fn:join(array, separator)
将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。如:${fn:join(array, ";")}
fn:length(item)
返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。如:${fn:length(shoppingCart.products)}
fn:replace(string, before, after)
返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果。如: ${fn:replace(text, "-", "?")}
fn:split(string, separator)
返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素。如:${fn:split(customerNames, ";")}
fn:startsWith(string, prefix)
如果参数string以参数prefix开头,返回true,如
fn:substring(string, begin, end)
返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符。如:${fn:substring(zip, 6, -1)}
fn:substringAfter(string, substring)
返回参数substring在参数string中后面的那一部分字符串。如:${fn:substringAfter(zip, "-")}
fn:substringBefore(string, substring)
返回参数substring在参数string中前面的那一部分字符串。如:${fn:substringBefore(zip, "-")}
fn:toLowerCase(string)
将参数string所有的字符变为小写,并将其返回。如:${fn:toLowerCase(product.name)}
fn:toUpperCase(string)
将参数string所有的字符变为大写,并将其返回。如:${fn:toUpperCase(product.name)}
fn:trim(string)
去除参数string 首尾的空格,并将其返回。如:${fn:trim(name)}
JSTL的fmt标签
需要写上的标签库:<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
格式化输出日期和日期型字符串。
2009-5-31 23:59:59
2009-4-1
23:59:59
2009-5-31
04-5-31
2009-5-31
2009年5月31日
2009年5月31日 星期一
23:59:59
下午11:59
23:59:59
下午11时59分59秒
下午11时59分59秒 CDT
星期四, 四月 1, 2009 13:30:00 -0600
" pattern="yyyy年MM月dd日HH点mm分ss秒" />
保留两位小数
格式数字(45,678.234)
格式百分比(23%)
-- $12.00
-- $12.0
-- $1,234,567,890.00(那个货币的符号和当前web服务器的 local 设定有关)
-- 123,456.79 (30变为30.0)
-- 123,456.7
-- 123,456.70
-- 1,200%type 可以是currency、 number、 和percent
-- 12.34