发表于: 2017-11-17 22:35:23
1 723
今日完成的事情:
今天主要讲小课堂:
小课堂的内容讲的是任务二的C标签:
1)背景介绍
在JSP页面编程中,使用标签库替代传统的Java片段语言来实现页面的显示逻辑是非常流行的做法。
JSTL标签库是由SUN公司推出的JSP标准标签库,用来解决创建的页面操作问题。
JSTL是一个不断完善的开放源代码的JSP标签库,其由Apache的Jakarta小组维护。在JSP2.0中作为标准支持。
JSTL中的标签可以分为5大类:
1)核心标签:作用:包含Web应用的常见工作,循环、输入输出等 URI:http://java.sun.com/jsp/jstl/core 前缀:c
2)国际化标签:作用:语言区域、消息、数字和日期格式化 URI:http://java.sun.com/jsp/jstl/fmt 前缀:fmt
3)XML标签:作用:访问XML文件 URI:http://java.sun.com/jsp/jstl/xml 前缀:x
4)数据库标签 作用:访问数据库 URI:http://java.sun.com/jsp/jstl/sql 前缀:sql
5)函数标签:作用:访问长度、字符串操作 URI:http://java.sun.com/jsp/jstl/functions 前缀:fn
在JSP页面中使用JSTL标签库,必须通过以下格式用taglib指令:
<%@ taglib uri="uri" prefix="prefix"%>
前缀prifix可以是任意的,但是采用惯例能够使团队的其他开发人员更容易读懂代码。
2)知识剖析:
Core标签库,又被称为核心标签库,该标签库的工作是对于JSP页面一般梳理的封装。
该标签库中一共有14个标签,被分为了4类:
多用途核心标签:<c:out>、<c:set>、<c:remove>、<c:catch>
条件控制标签:<c:if>、<c:choose>、<c:when>、<c:otherwise>
循环控制标签:<c:forEach>、<c:forTokens>
URL相关标签:<c:import>、<c:url>、<c:redirect>、<c:param>
<c:out>标签是一个最常用的标签,用于在JSP中显示数据。
<c:set>标签用于为变量或JavaBean中的变量属性赋值。
<c:remove>标签用于删除存在于scope中的变量。
<c:catch>标签用于在JSP页面中捕获异常。
<c:if>标签用于对某一条件进行测试,假如结果为true,就处理它的body content。测试结果可以保持在
var变量当中,之后可以引用该变量。
JSTL没有提供else标签,复杂的条件判断使用<c:choose>、<c:when>、<c:otherwise>标签。
<c:choose>标签没有属性,只是作为父标签存在,<c:when>、<c:otherwise>作为子标签来使用。
<c:choose>标签中可以嵌套一个或者多个,<c:when>标签,每个<c:when>标签都表示一种可以处理的情况。
<c:when>标签等价于if语句,它包含一个test属性,该属性表示需要判断的条件。
<c:otherwise>标签没有属性,它等价于else语句。
<c:forEach>标签用于循环控制,可以遍历的对象包括Java.util.Collection和Java.util.Map的所有实现类以及数组。
<c:forTokens>标签可以使用某个分隔符分割指定的字符串。
<c:import>标签用于包含另一个JSP页面到本页面中来。
<c:url>标签用于组合一个正确的URL地址。
<c:redirect>标签通过自动重写URL来将浏览器重定向至一个新的URL。
<c:param>标签用于在<c:url>标签中指定参数,而且与URL编码相关。
3)常见问题:
C标签如何使用?
4)解决方案:
1.导入相关的依赖。(jstl.jar和standard.jar)
2.在JSP页面引入taglib指令
5)编码实战:
编码实战环节,我演示<c:foreach>标签是提前做好的,并且没有改动,其他的标签功能延时代码都是改动比较大,所以我这里只贴<c:foreach>标签的演示代码:
首先有一个book实体类:
public class Book {
private Integer id;
private String name;private String author;
//省略set和get方法
控制器类:
@Controller
public class TestController {
@RequestMapping(value = "/forEachTest",method = RequestMethod.GET)
public String registerForm(Model model){
//页面用于遍历List集合
List<String> courseList=new ArrayList<String>();
courseList.add("javaEE");
courseList.add("MyBatis");
courseList.add("Spring");
//页面用于遍历List集合<Book>
List<Book> bookList=new ArrayList<Book>();
bookList.add(new Book(1,"冰与火之歌","乔治.马丁"));
bookList.add(new Book(2,"克伦威尔","维克托.雨果"));
bookList.add(new Book(3,"仲夏夜之梦","威廉.莎士比亚"));
bookList.add(new Book(4,"梦的解析","西格蒙德.佛洛依德"));
bookList.add(new Book(5,"基督山伯爵","大仲马"));
//页面用于遍历的Map集合<Integer,book>
Map<Integer,Book> bookMap=new HashMap<Integer, Book>();
bookMap.put(1,new Book(1,"冰与火之歌","乔治.马丁"));
bookMap.put(2,new Book(2,"克伦威尔","维克托.雨果"));
bookMap.put(3,new Book(3,"仲夏夜之梦","威廉.莎士比亚"));
bookMap.put(4,new Book(4,"梦的解析","西格蒙特.佛洛依德"));
bookMap.put(5,new Book(5,"基督山伯爵","大仲马"));
//model中添加属性
model.addAttribute("courseList",courseList);
model.addAttribute("bookList",bookList);
model.addAttribute("bookMap",bookMap);
return "forEachTest";
}
jsp页面:
<body>
<h2 style="color: red">普通循环</h2><br>
<table width="400" border="0" cellspacing="0" cellpadding="0">
<tr><th>index</th><th>count</th><th>isFirst</th><th>isLast</th></tr>
<c:forEach begin="0" end="6" step="2" varStatus="vs">
<tr align="center">
<td>${vs.index}</td><td>${vs.count}</td>
<td>${vs.first}</td><td>${vs.last}</td>
</tr>
</c:forEach>
</table>
<br>
<h2 style="color: red">遍历List集合 集合元素是String</h2><br>
<table width="400" border="0" cellspacing="0" cellpadding="0">
<tr>
<c:forEach items="${courseList}" var="course">
<td>${course}</td>
</c:forEach>
</tr>
</table>
<br>
<h2 style="color: red">遍历List集合 集合元素是对象</h2><br>
<table width="400" border="0" cellspacing="0" cellpadding="0">
<tr><th>编号</th><th>书名</th><th>作者</th></tr>
<c:forEach items="${bookList}" var="book">
<tr>
<td>${book.id}</td><td>${book.name}</td><td>${book.author}</td>
</tr>
</c:forEach>
</table>
<br>
<h2 style="color: red">遍历Map集合</h2><br>
<table width="400" border="0" cellspacing="0" cellpadding="0">
<tr><th>Key</th><th>编号</th><th>书名</th><th>作者</th></tr>
<c:forEach items="${bookMap}" var="entry">
<tr>
<td>${entry.key}</td><td>${entry.value.id}</td>
<td>${entry.value.name}</td><td>${entry.value.author}</td>
</tr>
</c:forEach>
</table>
</body>
以上是<c:foreach>标签演示的所有代码。
6)扩展思考:
为什么使用C标签?
1’使用标签库替代传统的Java片段语言来实现页面的显示逻辑是一种非常流行的做法。
2’使用自定义标签很容易造成重复定义和非标准的代码。
7)参考文献:
Spring+MyBatis企业应用实战
明日计划的事情:
进行任务六
遇到的问题:
录制视频,由于用的是没有破解的软件录制的,结果只能录制10分钟,晚上换一个录制软件重新录制。
收获:
C标签的用法。
任务开始时间:2017/11/17
预计完成时间:2017/11/24
延期:无
禅道:http://task.ptteng.com/zentao/my-task.html
评论