发表于: 2017-11-17 22:35:23

1 722


今日完成的事情:

今天主要讲小课堂:

小课堂的内容讲的是任务二的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



返回列表 返回列表
评论

    分享到