资源描述
标准标签库JSTL基本用法
标准标签是JSP提供的库文件,所以在使用之前需要将库文件的jar包导入到工程中去,导入方法如下:
选择1.1版本,导入之后,在工程的lib中添加了两个jar包—jstl.jar和standerd.jar,如下图:
我们所用到的标准标签的class文件就在这里面。
同时,在web-inf中也添加了很多tld文件,来配置后台处理类
打开c.tld配置文件,比较它和我们以前自定义的tld配置文件的内容是否一样。
注意:在使用标签之前一定要声明taglib指令:
<%@ taglib uri=" prefix="c"%>
其中uri在标准标签的c.tld(standerd.jar)中有定义。
• 基本标签c:out 的用法
–作用
• 使用JspWriter输出字符串、变量、JavaBean属性值
–用法举例
• 输出一个字符串,或者变量的值
–<c:out value=" this is a string" />
• 输出一个变量,先在request中共享一个变量name:
<%
request.setAttribute("name","amaker");
request.setAttribute("user",u);
%>
–<c:out value="${name}" />
• 输出一个JavaBean的属性
1)写一个JavaBean:User,生成get set方法
2)在声明中要import包,或者usebean
<%@ page language="java" import="java.util.*,com.amaker.bean.*" pageEncoding="gbk"%>
3)创建User对象
<%
User u = new User();
u.setId(1);
u.setName("tom");
request.setAttribute("user",u);
%>
4)声明taglib指令
<%@ taglib uri=" prefix="c"%>
5)在页面上输出一个JavaBean的值
<h2>输出一个Java Bean 属性</h2>
<c:out value="${user.id}"></c:out><br/>
<c:out value="${user.name}"></c:out>
• 基本标签c:set 的用法
–作用
• 在某个作用域中设置变量或JavaBean的属性值
–用法举例
• 使用value 设置特定范围内变量的值
<h2>
使用Value设置变量的值
</h2>
<c:set var="name" value="kite" />
<c:out value="${name}"></c:out>
• 使用body设置特定范围内变量的值
<h2>
使用body设置变量的值
</h2>
<c:set var="age">19</c:set>
<c:out value="${age}" />
• 设置对象的属性,使用target、property、value
<h2>
给JavaBean赋值
</h2>
<jsp:useBean id="user" class="com.amaker.bean.User"></jsp:useBean>
<c:set target="${user}" property="name" value="Joe"></c:set>
<c:out value="${user.name}"></c:out>
• 指定范围内设定变量的值,并在不同的位置取这个变量,观察什么时候能取到这个变量
(JSP共享变量的四个作用域:page request session application)
(1)在各个作用域中共享变量
<h2>
指定变量的Scope
</h2>
<c:set var="app_name" value="app_value" scope="application"></c:set>
<c:set var="session_name" value="session_value" scope="session"></c:set>
<c:set var="request_name" value="request_value" scope="request"></c:set>
<c:set var="page_name" value="page_value" scope="page"></c:set>
(2)在当前页面来取变量,四个都能取到
<c:out value="${app_name}"></c:out><br/>
<c:out value="${session_name}"></c:out><br/>
<c:out value="${request_name}"></c:out><br/>
<c:out value="${page_name}"></c:out><br/>
(3)新建一个jsp页面test_c_set.jsp,用c: out标签取四个变量,在共享变量的页面请求转发到test_c_set.jsp页面,只能取到前三个。(请求转发还是原来的请求,request中变量还能取到)
<jsp:forward page="/test_c_set.jsp"></jsp:forward>
(注意:转发页面也要使用标准标签指令!!)
(4)直接到浏览器中输入
http://localhost:8080/JSP_JSTL/test_c_set.jsp,就只能取到前两个
(5)关闭浏览器,重新打开,只能取到第一个了。
• 条件判断标签c:if 的用法
–作用
• 条件判断输出
–例如:根据用户的权限,来显示页面(如:是否有删除权限)
–用法举例
例1、判断是否admin权限,是则能使用删除按钮,否则删除按钮为不可用状态。
<body>
<h2>C IF</h2>
<%
request.setAttribute("username","zs");
%>
<c:if test="${username=='admin'}">
<input type="button" value="Delete"/>
</c:if>
<c:if test="${username!='admin'}">
<input type="button" value="Delete" disabled="disabled"/>
</c:if>
</body>
例2、
<c:if test=${age<18}>
你的年龄太小,不能访问该页面!
</c:if>
• 条件判断标签c:choose、c:when、c:otherwise 的用法
–作用
• 判断多重条件,这个三个标签必须一起使用
–用法举例:判断成绩的区间,分别给出优秀、良好、一般的等级。
<body>
<h2>C Choose</h2>
<%
request.setAttribute("score",50);
%>
<c:choose>
<c:when test="${score>=90}">优秀!!!</c:when>
<c:when test="${score<90&&score>80}">良好!!</c:when>
<c:otherwise>一般!</c:otherwise>
</c:choose>
</body>
• 迭代循环c:forEach的用法(重要!!!)
–作用
• 迭代循环输出集合中的元素。
–用法(有三种)
• 用法1:简单迭代举例
1、从集合中取出元素,显示到页面上(一般来说,集合中的元素是从数据库中得到的,我们这里为了简约起见,直接创建一个ArrayList元素,并将其共享到request中)
步骤1:创建集合元素
<%
List list = new ArrayList();
for(int i=0;i<10;i++)
{
User u = new User();
u.setId(i);
u.setName("name"+i);
list.add(u);
}
request.setAttribute("UserList",list);
%>
步骤2:先看,如果不用标签,采用Java代码如何写:
<table>
<tr><th>ID</th><th>Name</th></tr>
<%
for(int j=0;j<list.size();j++)
{
User u2 = (User)list.get(j);
out.println("<tr>");
out.println("<td>");
out.println(u2.getId());
out.println("</td>");
out.println("<td>");
out.println(u2.getName());
out.println("</td>");
out.println("</tr>");
}
%>
</table>
步骤3:采用标签
<table>
<tr><th>ID</th><th>Name</th></tr>
<c:forEach var="user" items="${UserList}">
<%--var是给每轮迭代的对象起的别名,items 指的是取到的集合共享对象的名字--%>
<tr>
<td>
<%--<c:out value="${user.id}"></c:out>--%>
${user.id}
</td>
<td>
<%-- <c:out value="${user.name}"></c:out> --%>
${user.name}
</td>
</tr>
</c:forEach>
</table>
可以看到,如果不使用标签,那么需要用Java代码动态拼出一个table,比较麻烦,和页面的效果结合非常困难,而采用标签则非常简单。
• 用法2:固定次数迭代
<c:forEach var="k" begin="1" end="20">
${k }
</c:forEach>
• 用法3:固定次数,指定步长迭代
<c:forEach var="k" begin="1" end="20" step="2">
${k }
</c:forEach>
• 用法4:获得迭代状态:通过属性status来获得迭代状态
<table>
<tr><th>ID</th><th>Name</th><th>index</th><th>count</th><th>first?</th><th>last?</th></tr>
<c:forEach var="user" items="${UserList}" varStatus="status">
<tr>
<td>
${user.id}
</td>
<td>
${user.name}
</td>
<td>
${status.index }
</td>
<td>
${status.count }
</td>
<td>
${status.first }
</td>
<td>
${status.last }
</td>
</tr>
</c:forEach>
</table>
7
展开阅读全文