12EL表达式 C标签

来源:互联网 发布:php 403 没有权限访问 编辑:程序博客网 时间:2024/05/20 18:15
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传递参数: 
<jsp:include page="included2.jsp" flush="true">     
     <jsp:param name="ref1" value="AAA"/> 
     <jsp:param name="ref2" value="BBB"/> 
</jsp:include> 




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
<c:if test="${info!=null }">


Empty操作符(空值检查)
使用empty操作符来决定对象、集合或字符串变量是否为空或null。例如:
${empty para.username}
如果request的参数列表中的username值为null,则表达式的值为true。 EL也可以直接使用比较操作符与null进行比较。如${para.firstname == null}。


//判断是否等于字符串'产品管理'
<c:if test="${r2.menuName=='产品管理'}">
产品管理
</c:if>


比较操作符  描述  
==或eq     相等检查  
!=或ne     不等检查  
<或lt      小于检查  
>或gt      大于检查  
<=或le     小于等于检查  
>=或ge     大于等于检查 
算术运算符(+、-(二元)、*、/、div、%、mod)与逻辑运算符均(and、&&、or、||、!、not)与JAVA语言相同,不再列表。
条件运算符 ?=
${A?B:C } 如果A 为true 则返回B 否则返回 C  
例如:
<select >
<option value="1"  ${para.op==1 ? "selected" : ""}>选项一</option>
<option value="2"  ${para.op==2 ? "selected" : "">选项二</option>
</select >
1+2: ${1+2 }<br>
10/5:  ${10/5 }<br>
10 div 5:  ${10 div 5 }<br>
10%3:  ${10 % 3 }<br>
10 mod 3:  ${10 mod 3 }<br>




属性范围在EL中的名称:
         Page             pageScope
         Request          requestScope
         Session          sessionScope
         Application      applicationScope


<%=request.getParameter("username")% > 等价于${ para.username }。para:将请求参数名称映射到单个字符串参数值。
EL语言可以完成如果得到一个username为空,则不显示null,而是不显示值。      


${paramValues}表示返回请求参数的一组值。等同于<%=request.getParameterValues("sampleValue")};
例如:
<form action="sampleJsp.jsp" method="post">
    <input type="text" name="sampleValue" value="10" />
    <input type="text" name="sampleValue" value="11" />
    <input type="text" name="sampleValue" value="12" />
    <input type="text" name="sampleSingleValue" value="SingleValue"/>
    <input type="submit" value="提交"/>
   </form>


sampleJsp.jsp 的<body>中有
    ${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"%>
<c:out> 
<c:out>标签是一个最常用的标签,用于在JSP中显示数据。它的作用是用来替代通过JSP内置对象out或者<%=%>标签来输出对象的值。如:
<c:set value="wowowo" var="test" scope="request"/>
<c:out value="${requestScope.test}" dafault="defaultvalue"/>
<c:out value="C标签"/>
default属性,假若value为null,会显示default的值;假若没有设定default的值,则会显示一个空的字符串。


<c:set>
<c:set>标签用于为变量(page,request,session,application)赋值或对javaBean中变量的属性进行赋值。
将value的值存储到范围为scope的varName变量之中(默认scope的值为page):
<c:set value="value" var="varName" [scope="{page|request|session|application}"]/> 
将body内容存储至范围为scope的varName变量之中:
<c:set var="varName" [scope="{page|request|session|application}"]> 
 body..... 
</c:set> 


将value的值存储至target对象属性中
<c:set value="value" target="target" property="propertyNmae"/> 
将body内容的数据存储至target对象属性中 
<c:set target="target" property="propertyNmae"> 
 body.... 
</c:set> 
如:<c:set target="${cust.address}" property="city" value="$"/>  


<c:remove>
<c:remove>标签用于删除存在于scope中的变量。
<c:remove var="varName" [scope="{page|request|session|application}"]/> 
如:<c:remove var="sampleValue" scope="session"/> 


<c:if>
<c:if>仅当所指定的表达式计算为true时才执行其体内的语句。计算结果也可以保存为一个变量中。  
没有体,将计算结果保存在var变量中:
<c:if test="booleanExpression"  var="var" [scope="page|request|session|application"]/>  
有体:
<c:if test=" booleanExpression "> 
  JSP elements ...
</c:if> 
例如:
<c:if test="${para['login_error']==1}">
登录失败
</c:if>




<c:choose>
<c:choose>和<c:when>,<c:otherwise>一起实现互斥条件执行,类似于java中的if else。<c:choose>一般作为<c:when>和<c:otherwise>的父标签:
<c:choose>
<c:when test="${row.v_money<10000}">
  小于10000
</c:when>
<c:when test="${row.v_money>=10000}&&row.v_money<20000">
  大于等于10000,小于等于20000
</c:when>
<c:otherwise>
  其它
</c:otherwise>
</c:choose>




<c:forEach>
主要用于对集合进行迭代。
<c:forEach items="collection" [var="var"] [begin="startIndex"] [end="stopIndex"] [step="increment"]>  


JSP elements  


</c:forEach>  
例如:
<c:forEach items="${authorities}" var="athes">
${athes.authority}
</c:forEach> 


另外迭代固定的次数:
<c:forEach [var="var"] begin="startIndex" end="stopIndex" [step="increment"]>  


JSP elements  


</c:forEach>  
例如:
<c:forEach var="st" begin="1" end="3">
${st}//将输出3次
</c:forEach>
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" %> 
<H2>Key Words:</H2> 
<UL> <c:forEach var="word“ items="${words}"> 
<LI><c:out value="${word}"/> </c:forEach> 
</UL> 
***************************
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 
<c:if test="${fn:contains(name, searchString)}"> 


fn:containsIgnoreCase(string, substring) 
如果参数string中包含参数substring(忽略大小写),返回true 
<c:if test="${fn:containsIgnoreCase(name, searchString)}"> 


fn:endsWith(string, suffix) 
如果参数 string 以参数suffix结尾,返回true。如:<c:if test="${fn:endsWith(filename, ".txt")}"> 


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,如<c:if test="${fn:startsWith(product.id, "100-")}"> 


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" %>
格式化输出日期和日期型字符串。
<fmt:formatDate value="${isoDate}" type="both"/>
2009-5-31 23:59:59


<fmt:formatDate value="${date}" type="date"/>
2009-4-1


<fmt:formatDate value="${isoDate}" type="time"/>
23:59:59


<fmt:formatDate value="${isoDate}" type="date" dateStyle="default"/>
2009-5-31


<fmt:formatDate value="${isoDate}" type="date" dateStyle="short"/>
04-5-31


<fmt:formatDate value="${isoDate}" type="date" dateStyle="medium"/>
2009-5-31


<fmt:formatDate value="${isoDate}" type="date" dateStyle="long"/>
2009年5月31日


<fmt:formatDate value="${isoDate}" type="date" dateStyle="full"/>
2009年5月31日 星期一


<fmt:formatDate value="${isoDate}" type="time" timeStyle="default"/>
23:59:59


<fmt:formatDate value="${isoDate}" type="time" timeStyle="short"/>
下午11:59


<fmt:formatDate value="${isoDate}" type="time" timeStyle="medium"/>
23:59:59


<fmt:formatDate value="${isoDate}" type="time" timeStyle="long"/>
下午11时59分59秒


<fmt:formatDate value="${isoDate}" type="time" timeStyle="full"/>
下午11时59分59秒 CDT


<fmt:formatDate value="${date}" type="both" pattern="EEEE, MMMM d, yyyy HH:mm:ss Z"/>
星期四, 四月 1, 2009 13:30:00 -0600


<fmt:formatDate value="${isoDate}" type="both" pattern="d MMM yy, h:m:s a zzzz/>
31 五月 04, 11:59:59 下午 中央夏令时




日期格式(2008年5月5日22点00分23秒)
<fmt:formatDate value="<%=new Date() %>" pattern="yyyy年MM月dd日HH点mm分ss秒" />


保留两位小数
<fmt:formatNumber value="123.123456789" pattern="0.00"/>


格式数字(45,678.234)
<fmt:formatNumber type="number" value="45678.2345" />


格式百分比(23%)
<fmt:formatNumber type="percent" value="0.2345" />




<fmt:formatNumber value="12" type="currency" pattern="$.00"/> -- $12.00  
<br/>   
<fmt:formatNumber value="12" type="currency" pattern="$.0#"/> -- $12.0  
<br/>   
<fmt:formatNumber value="1234567890" type="currency"/> -- $1,234,567,890.00(那个货币的符号和当前web服务器的 local 设定有关)   
<br/>   
<fmt:formatNumber value="123456.7891" pattern="#,#00.0#"/> -- 123,456.79  (30变为30.0)
<br/>   
<fmt:formatNumber value="123456.7" pattern="#,#00.0#"/> -- 123,456.7  
<br/>   
<fmt:formatNumber value="123456.7" pattern="#,#00.00#"/> -- 123,456.70  
<br/>   
<fmt:formatNumber value="12" type="percent" /> -- 1,200%type 可以是currency、 number、 和percent   
<br/>   
<fmt:formatNumber value="12.345" pattern="#.##" />  -- 12.34  

0 0
原创粉丝点击