Servlet和Jsp页面数据交互二:JSTL标签和JAVA脚本遍历集合
作者:强哥   类别:Web前端    日期:2017-12-08 16:19:51    阅读:2656 次   消耗积分:0 分

在Servlet和Jsp页面数据交互的系列博客的第一篇中,使用了EL表达式。现在对EL表达式部分补充一个重要的知识点----EL表达式中使用隐式变量。隐式变量的类别、变量名、以及描述见图1。接下来简单介绍一下JSTL标签。

隐式变量

                                     图1 隐式变量

JSP标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。JSTL支持通用的、结构化的任务,例如遍历、逻辑控制、国际化标签、SQL标签等。根据JSTL标签提供的功能,可以将它分为5个类别:核心标签、格式化标签、SQL标签、XML标签JSTL函数。使用JSTL标签前需要安装库,步骤很简单:拷贝standard.jar和jstl.jar文件到java-web工程的/WEB-INF/lib目录下。在使用任何库前,你必须在jsp文件的开始位置包含<taglib>标签。例如引入核心库和函数库方式如下:                                                  

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>。

使用方式如下:           

<c:forEach items="${requestScope.userList }" var="u" begin="0" end="${fn:length(requestScope.userList) }" step="1" varStatus="status" >,这是核心库的forEach标签的使用,requestScope是一个隐式变量,我测试发现可以不用写出来直接使用items="${userList }"也可以实现功能 ,requestScope的详细描述请参见图1。

我先介绍JAVA脚本处理从前端控制器Servlet传到页面上的集合的方式,这里使用List集合举例。Servlet中的代码片段如下:

Users user0 = new Users(0, "demo", "demo123");
Users user1 = new Users(1, "wnxy", "wnxy123");
Users user2 = new Users(2, "test", "test123");
Users user3 = new Users(2, "woniu", "woniu123");

// 实例集合,并添加元素
List<Users> userList = new ArrayList<Users>();
userList.add(user0);
userList.add(user1);
userList.add(user2);
userList.add(user3);
request.setAttribute("userList", userList);
// 请求派发
request.getRequestDispatcher("jspPage/test.jsp").forward(request, response);

Users类是已经定义好了,它包括三个属性:id、code、pass。把4个Users的对象添加到userList中,再把userList保存到request对象中,这样,页面上就可以取到集合对象。使用JAVA脚本在jsp页面遍历集合关键代码如下:

<table border="1">
    <thead>
        <td>编号</td>  <td>id</td>  <td>账号</td>   <td>密码</td>
    </thead>
    <tbody>
        <%List<Users> uList = (List<Users>)request.getAttribute("userList");
        for (int i = 0; i < uList.size(); i++){ %>
        <tr>
            <td><%=i + 1 %></td>
            <td><%=uList.get(i).getId() %></td>
            <td><%=uList.get(i).getCode() %></td>
            <td><%=uList.get(i).getPass() %></td>
        </tr>
        <%} %>
    </tbody>
</table>

JAVA 脚本以“<%”开始,以“%>”结束。值得注意的是,我们必须要在jsp文件中引入我们使用到的类(除java.lang包外),引入方式:

<%@ page language="java" import="wnxy.javaweb.demo.dao.po.*" %>。

除了使用JAVA脚本,我们还可以用JSTL标签来完成集合的遍历,安装JSTL标签库和在jsp页面引入标签的方法请参照第一篇博客,这里不再赘述。下面我们演示使用核心库的<c:forEach>标签完成集合遍历,核心代码如下:

<tbody>
    <c:forEach items="${requestScope.userList }" var="u" begin="0" end="${fn:length(requestScope.userList) }"step="1" varStatus="status" >
        <tr>
            <td>${status.count }</td>
            <td>${u.id }</td>
            <td>${u.code }</td>
            <td>${u.pass }</td>
        </tr>
    </c:forEach>
</tbody>

<c:forEach>标签包含一下几个属性:1. items:它的值是我们要循环的信息,有的资料上说这个属性不是必要属性,但是我的测试结果表明它是必须属性。2. var:代表当前循环使用对象的变量名。3. begin:开始的元素,有一点索引的感觉,0表示第一个元素,1表示第二个元素,默认值为0。4. end:结束的元素,循环到第几个元素后就结束循环,和begin一样,0表示第一个元素,其默认值是最后一个元素。5. step:每次循环的步长,默认值为1。6. varStatus:代表循环状态的变量名称,详细描述如下面引用部分,使用方式如上例。从<c:forEach>标签属性的描述来看,第3、4、5个属性可以直接使用默认值就OK。说明一下,这个例子中的 fn:length 是JSTL标签的函数标签,它表示获取参数的长度。

Getter                       描述current    getCurrent()           当前这次迭代的(集合中的)项

index       getIndex()               当前这次迭代从 0 开始的迭代索引

count       getCount()             当前这次迭代从 1 开始的迭代计数

first          isFirst()                  用来表明当前这轮迭代是否为第一次迭代的标志

last          isLast()                  用来表明当前这轮迭代是否为最后一次迭代的标志

begin      getBegin()             begin 属性值

end         getEnd()                 end 属性值

step        getStep()                step 属性值

对比上述两例,JAVA脚本的例子中,使用了HTML页面标签和<% %>包裹的JAVA代码,他们风格不同一,显得杂乱,可读性和可维护性差。第二例使用JSTL标签,它与HTML标签的风格类似,都严格遵循XML的语法,代码看起来干净整洁,可读性好,更重要的是JSTL标签可以重复使用。所以在项目开发过程中,极少使用JAVA脚本,而JSTL标签和EL表达式配合使用,完全可以满足页面显示需要。JSTL标签除了上例的功能外还有逻辑判断等其他功能,下期将介绍它的常用标签。

 


蜗牛学院,只为成就更好的你!

你!敢不敢!用你三个月的时间,换你不一样的未来!

赶快关注蜗牛学院官方微信,了解更多信息吧!

20181009_153045_341.jpg

   
版权所有,转载本站文章请注明出处:蜗牛笔记, http://www.woniunote.com/article/17
上一篇: 特大喜讯!联想11日在蜗牛学院进行招聘宣讲,现场招收学员两名!
下一篇: 互联网大势之下,大学生就业是否还是IT职业教育死穴?
提示:登录后添加有效评论可享受积分哦!
最新文章
    最多阅读
      特别推荐
      回到顶部