1、jstl标签库的配置
·将jstl.jar和standard.jar两个jar文件拷贝到WEB-INF/lib下(如果只是使用el表达式,不用拷贝这两个jar文件)。
·注意:jstl必须在能够支持j2ee1.4/servlet2.4/jsp2.0版本上的容器才能运行,这个环境是目前较为常用的环境,如果低于2.4的话,需要在web.xml中配置
2、具体实现
<1>JstlCoreAction.java文件
package com.bjsxt.struts;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* 测试jstl核心库
* @author Administrator
*
*/
public class JstlCoreAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//普通属性
request.setAttribute("hello", "Hello World");
//测试条件控制标签
request.setAttribute("v1", 1);
request.setAttribute("v2", 2);
request.setAttribute("v3", new ArrayList());
request.setAttribute("v4", "test");
//html文本
request.setAttribute("bj", "<font color='red'>北京欢迎您</font>");
//测试c:forEach
Group group = new Group();
group.setName("尚学堂");
List userList = new ArrayList();
for (int i=0; i<10; i++) {
User user = new User();
user.setUsername("user_" + i);
user.setAge(18+i);
user.setGroup(group);
userList.add(user);
}
request.setAttribute("userlist", userList);
//测试循环输出map
Map map = new HashMap();
map.put("k1", "v1");
map.put("k2", "v2");
request.setAttribute("mapvalue", map);
//测试c:forTokens,测试逗号表达式
request.setAttribute("strTokens", "1,2,3,4,5,6");
return mapping.findForward("success");
}
}
<2>jstl_core.jsp文件
·测试c:out
首先引入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
详细代码如下:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>测试jstl核心库</title>
</head>
<body>
<h1>测试jstl核心库</h1>
<hr>
<li>测试c:out</li><br>
hello(defalut):<c:out value="${hello}"/><br>
hello(el表达式):${hello }<br>
hello(default="123" --如果$abc为空,测输出123):<c:out value="${abc}" default="123"/><br>
hello(default="123" --如果$abc为空,测输出123):<c:out value="${abc}">123</c:out><br>
bj(defalut --原样输出):<c:out value="${bj}"/><br>
bj(escapeXml="true" --原样输出):<c:out value="${bj}" escapeXml="true"/><br>
bj(escapeXml="false" --解释输出):<c:out value="${bj}" escapeXml="false"/><br>
bj(el表达式 --解释输出):${bj }<br>
<p>
<li>测试c:set--设置临时变量(可以设置scope的范围)和c:remove--删除临时变量 </li><br>
<c:set value="123" var="temp"/>
temp:${temp }<br>
<c:remove var="temp"/>
temp:${temp }<br>
<p>
<li>测试条件控制标签c:if 如下如果v1的值小于v2的值,返回true,否则返回false,并将返回值给变脸v</li><br>
<c:if test="${v1 lt v2}" var="v">
v1小于v2<br>v=${v }<br>
</c:if>
<c:if test="${empty v3}">
v3为空<br>
</c:if>
<c:if test="${empty v4}">
v4为空<br>
</c:if>
<p>
<li>测试条件控制标签c:choose,c:when,c:otherwise --相当与if..else</li><br>
<li>c:choose必须配合c:when,即至少有一个c:when和0个c:otherwise,如果要使用c:otherwise的话,则c:when必须要在c:otherwise的前面</li>
<c:choose>
<c:when test="${v1 lt v2}">
v1小于v2<br>
</c:when>
<c:otherwise>
v1大于v2<br>
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${empty v4}">
v4为空<br>
</c:when>
<c:otherwise>
v4不为空<br>
</c:otherwise>
</c:choose>
<p>
<li>测试循环控制标签c:forEach</li><br>
<table border="1">
<tr>
<td>姓名</td>
<td>年龄</td>
<td>所属组</td>
</tr>
<c:choose>
<c:when test="${empty userlist}">
<tr>
<td colspan="3">没有符合条件的数据!</td>
</tr>
</c:when>
<c:otherwise>
<!-- items就是我们要输出的集合,循环输出的时候,需要将集合中的元素赋值给一个变量var -->
<c:forEach items="${userlist}" var="u">
<tr>
<td>${u.username }</td>
<td>${u.age }</td>
<td>${u.group.name }</td>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
</table>
<p>
<li>测试循环控制标签c:forEach,varstatus(变量状态,每循环一次其值自动增加一次,从1开始)</li><br>
<table border="1">
<tr>
<td>姓名</td>
<td>年龄</td>
<td>所属组</td>
</tr>
<c:choose>
<c:when test="${empty userlist}">
<tr>
<td colspan="3">没有符合条件的数据!</td>
</tr>
</c:when>
<c:otherwise>
<c:forEach items="${userlist}" var="user" varStatus="vs">
<c:choose>
<c:when test="${vs.count % 2 == 0}">
<tr bgcolor="red">
</c:when>
<c:otherwise>
<tr>
</c:otherwise>
</c:choose>
<td>
<c:out value="${user.username}"/>
</td>
<td>
<c:out value="${user.age}"/>
</td>
<td>
<c:out value="${user.group.name}"/>
</td>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
</table>
<p>
<li>测试循环控制标签c:forEach,begin(表示从循环元素中的第几个元素开始),end(第几个元素结束),step(步长,每次递增几个)</li><br>
<table border="1">
<tr>
<td>姓名</td>
<td>年龄</td>
<td>所属组</td>
</tr>
<c:choose>
<c:when test="${empty userlist}">
<tr>
<td colspan="3">没有符合条件的数据!</td>
</tr>
</c:when>
<c:otherwise>
<!-- 从第2个元素开始,第8个元素结束,每次递增2个元素 -->
<c:forEach items="${userlist}" var="user" begin="2" end="8" step="2">
<tr>
<td>${user.username}</td>
<td>${user.age}</td>
<td>${user.group.name }</td>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
</table>
<p>
<li>测试循环控制标签c:forEach,普通循环</li><br>
<!-- 输出10个a -->
<c:forEach begin="1" end="10">
a<br>
</c:forEach>
<p>
<li>测试循环控制标签c:forEach,输出map</li><br>
<c:forEach items="${mapvalue}" var="v">
${v.key }=${v.value }<br>
</c:forEach>
<p>
<li>测试循环控制标签c:forTokens(逗号表达式(,),或者其他表达式)</li><br>
<!-- request.setAttribute("strTokens", "1,2,3,4,5,6"); delims表示间隔符 -->
<c:forTokens items="${strTokens}" delims="," var="v">
${v }<br>
</c:forTokens>
<p>
<li>测试c:catch相当于try..catch..</li><br>
<%
try {
Integer.parseInt("asdfsdf");
}catch(Exception e) {
out.println(e.getMessage());
}
%>
<p>
<!-- 异常信息放在var="exinfo"中 -->
<c:catch var="exinfo">
<%
Integer.parseInt("asdfsdf");
%>
</c:catch>
${exinfo }<br>
<p>
<li>测试c:import 相当于include</li><br>
<!-- 引入index.jsp页面 -->
<c:import url="http://localhost:8080/struts_login"/>
<p>
<li>测试c:url和c:param</li><br>
<!-- 生成http://localhost:8080/drp/sysmgr/user_add.jsp?username=Jack&age=20 -->
<c:url value="http://localhost:8080/drp/sysmgr/user_add.jsp" var="v">
<c:param name="username" value="Jack"/>
<c:param name="age" value="20"/>
</c:url>
${v }<br>
<li>测试:redirect(中定向标签) 不使用context的,则url使用完整路径</li><br>
<c:redirect context="/struts_login" url="/index.jsp"/>
</html>
浙公网安备 33010602011771号