EL表达式和JSTL标签库学习笔记

先说一些数据库的知识,在进行表的操作时,若有一对多的关系,则在建外键时应选择多的一方。如user和group的对应关系,应在一个user属于多少个group,而不是一个group有多少用户,虽然这样也能实现,但就是比较麻烦而已。


1.el表达式操作的是作用域中的属性,即属性一定要放到作用域中才能被el表达式获取。必须以${xxx}来表示。其中作用于按范围由小到大有pageScope,requestScope,sessionScope,applicationScope
而属性包括param和paramValue,前者为单值,后者为数组。

2.el表达式中的变量,都必须用"setAttribute("a",A)"放到作用域内。可把a看做key,A看做value

3.

${param.a}//相当于:<%=request.getParameter("a") %>
${paramValue.b[0]}//相当于<%=request.getParameterValue("b[0]") %>
4.JSTL标签库,即JSP Standard Tag Library JSP标准标签库,只要掌握核心标签库http://java.sun.com/jsp/jstl/core即可,其它的用的时候再查就行。
而这里边最常用的是三种<c:if>,<c:foreach>,<c:choose>。标签库的作用就是增强代码可读性,平常在页面中用<% %>来插入java代码。如:

<%
	request.setAttribute("a",3);
	int a = (Integer)request.getAttribute("a");
	if(a==3){
	%>
		<b>a==3<b/>
	<%}else{ %>
		<b>a!=3<b/>
	<%
		}
	
%>
这样可读性很差,如果使用标签库来实现,则可这样写(必须先引入标签库):

<%@ taglib url="http://java.sun.com/jsp/jstl/core" prefix="c">

<c:choose>
	<c:when tst="${a==3}">
		<b>a==3</b>
	</c:when>
	<c:otherwise>
		<b>a!=3</b>
	</c:otherwise>
</c:choose>
<c:if>的例子, var用来存储test执行后的结果

<c:if test="${empty requestScope.s}" var="resultTest">
	<h1>true才显示</h1>
</c:if>
结果为:

${resultTest}

5.el存取变量数据的方法很简单,例如:${username}意为取出某一范围中名称为username的变量,由于没有指定范围,所以会依次从

pageScope,requestScope,sessionScope,application中去寻找。如果找到username,就返回值。若没有找到,就返回空字符串"",而不是null,这个要注意。

例如:要取得session中储存的一个username的值,可用下列方法:

session.getAttribute("username");
在el表达式中,则可用

${sessionScope.username};


6.对于这些标签,只要掌握<c:if>,<c:choose>,<c:foreach>即可
①<c:if>相当于java中的if语句
有三个参数,test,var,scope
test:若返回true,则执行本体内容;否则不执行
var:用来存储test执行后的结果
scope:作用域,一般不写

<c:if test="${empty requestScope.s}" var="result">
	<h1>true才显示</h1>
</c:if>
执行结果:${result}

②<c:choose>相当于java中的if-else语句

<c:choose>
	<c:when test="${empty requestScope.s}">
		<h1>空</h1>
	<c:when>
	<c:otherwise>
		<h1>非空</h1>
	</c:otherwise>
</c:choose>
注意:
<c:when>必须在<c:otherwise>前边;
<c:choose>中除了<c:when>和<c:otherwise>外不能有其它元素

③<c:forEach>相当于java中的遍历操作
一般只用到items,var,varStatus属性
items:就是要遍历的数组或集合,数组或集合的name是什么,items就写什么
var:就是用来存放遍历的结果

varStatus:封装了当前遍历的状态,一般与index,count合用。可以实现一些与行数有关的功能,可以实现斑马线功能。
${status.index}输出行号,从0开始,为索引
${status.count}输出计数,从1开始,为计数

<c:forEach begin="1" end="5" step="2" items="${list}" var="result">//表示操作list集合中1-5条数据,不是逐条循环,而是按每2个取值。即操作集合中的第1,3,5条数据。

输出集合内容,若索引号为5的倍数,就换行。

<%
	List list = new ArrayList();
	for(int i=0;i<20;i++){
		list.add("A"+i);
	}
	pageContext.setAttribute("li",list);
	//把list内容添加到li中
%>

<c:forEach items="${li}" var="a" begin="5" end="13" step="3" varStatus="idx">
	<b>${a}</b>
	<c:if test="${(idx.index+1)%5==0}">
		<br>
	</c:if>
</c:forEach>


下面说下如何实现斑马线功能

<c:forEach var="varity" items="${sessionScope.myList}" varStatus="status">
<!--实现斑马线效果-->
<c:if test="${status.count%2==0}">
	<tr bgcolor="lightyellow">
</c:if>
<c:if test="${status.count%2!==0}">
	<tr>
</c:if>
</c:forEach>


输出1到9的平方

<c:forEach var="x" begin="1" end="9" step="1">
	${x*x}
</c:forEach> 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值