• 关于jsp中jstl-core标签循环遍历的使用


    JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

    JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

    这里说一下核心标签的使用

    核心标签:

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

      上述代码复制在新建的jsp文件顶部(只要放在上面,哪都行).如果没有tomcat的servlet包的话是不能用jsp的,建议看Javaweb章节。

    重点来说一下<c:foreach> 配合<c:if test="">的使用。

      对jsp有了解的都知道从各个scope中取出一些值,回显到页面上。存储的值可以是对象,list,string等类型。通过复杂类型在这里作简要的介绍:

      首先将一个CompleteForumPage对象存到springmvc的model中,相当于Javaweb中普通的request域,struts的servletContext域。作用范围都是一次请求redirect后内容消失,不同的是springmvc的model域的值可以改变,此处不扩展。

    来看一下CompleteForumPage

     1 public class CompleteForumPage implements Serializable{
     2 
     3     /**
     4      * 
     5      */
     6     private static final long serialVersionUID = 1L;
     7     private Forum forum;
     8     private Integer currentPage;
     9     private Integer pageSize;
    10     private Integer totalCount;
    11     private Integer totalPage;
    12     private List<Comment>comments;
    13 //省略get set construct方法 实际中是一定要的
    14 
    15 }

    容易看出CompleteForumPage对象中除了有简单JavaInteger类型还有List<object>类型还有一个Forum类型

     1 public class Forum implements Serializable{
     2 
     3     /**
     4      * 
     5      */
     6     private static final long serialVersionUID = 1L;
     7 //主键生成  用uuid
     8     private String forum_id;
     9     private String forum_title;
    10     private String forum_header;
    11     private String forum_description;
    12     private Date create_time;
    13     private Institution institution;
    14     private User author
    15 };

    以上是Forum对象 然后里面还有User类和Institution类。。就不展开了,这大概也是关系型数据库的优点和缺点吧。

    关于CompleteForumPage中List<Comment>的Comment对象

     1 public class Comment implements Serializable{
     2 
     3 
     4     /**
     5      * 
     6      */
     7     private static final long serialVersionUID = 1L;
     8     //数据库中是varchar  主键生成用uuid 吧
     9     private String comment_id;
    10     private String comment_details;
    11     private Forum forum;
    12     private User responser;
    13     private Date create_time;
    14 }

    将CompleteForumPage存入model中然后放在jsp页面中回显。首先注意到有个Comment的List。通过

    model.addAttribute("pageBean", forumCommentPage);

    将一个forumCommentPage对象存在model中

    再在jsp中取出回显

    <c:forEach items="${pageBean.comments }" var="comment" varStatus="s" >
    ${comment.responser.username }
    </c:forEach>

    类似于上面的这种操作可以将数据取出 取出时回显到页面的就是html数据 ,你对其作属性类型对应的操作如:Integer的pageSize 你可以做++ 和--  前提是在jsp的翻译标签内。之外就变成html的字符了。解释下上述:

    items:期望在foreach中遍历的对象可以是map set list 操作时一样的。这里我存了是List<Comment>对象,参照上述实体代码理解。 var表示每一个for 循环的对象类似Java中

    for(Comment comment : comments){
    
    }

    varStatus这里看不出有什么作用,我们可以通过${s.index}查看遍历到第几个list中的对象了  重点:${ }一定要用这个c标签的符号包起来

    在<c:foreach></c:foreach>内部可以取出你遍历的对象的属性。由于我List中的object是Comment  对应的Comment有 String类型 Forum类型 和User类型

    上面我取出的是 User类型 重点:我使用的是responser 而不是User  这是因为你只能你var的是Comment  而User只是Comment的一个属性,c标签正是取出属性。接着我又取出了User 的username属性。

    但是我这样做是有点问题的,这会在后台消耗大量的资源来连接查询对应的对象。看起来问题不大,但是在高并发的情况下大批量的sql查询语句几乎能让你的服务器挂掉。这也算是关系型数据库的一个不好的地方。

    其他如Comment 的comment_id可用${comment.comment_id} .如需其他的请参照前述代码,不做赘述。

     再就是取CompleteForumPage的属性。我们在model域中存储的名字叫pageBean  所以 CompleteForumPage对象的名字即是pageBean,如想取出其属性可直接${pageBean.currentPage}这样。很简单。

    核心标签库中还有一个<c:if>也很重要 很常用  如

    1 <c:if test="${ss==pageBean.totalPage&&pageBean.currentPage<pageBean.totalPage }">

    完整的是这样的

     1 <c:forEach begin="1" end="${pageBean.totalPage }" var="ss" >
     2                 <c:if test="${ss==1&&pageBean.currentPage>1 }">
     3                     <li><a href="#">Previous</a></li>
     4                     </c:if>
     5                      
     6                     <li class="active"><a href="#">${ss } </a></li> 
     7                     <c:if test="${ss==pageBean.totalPage&&pageBean.currentPage<pageBean.totalPage }">
     8                     <li><a href="#">Next</a></li>
     9                     </c:if>e'l
    10 </c:forEach>

    这个foreach有点不同 ,这个类似于我们用的for(;;;)就是从1到end值 然后ss会记录每次循环的index,ss从你设置的begin开始初始值也就是你的begin。可以灵活使用。上述代码是我做的一个分页判断 第一页不显示Previous最后一页不显示next。

    其中这个是个判断语句类似if但是它没有else所以使用起来有点麻烦 需要判断== 和!=才能做到if else 的效果

    <c:if test="${ss==pageBean.totalPage&&pageBean.currentPage<pageBean.totalPage }">
                        <li><a href="#">Next</a></li>
                        </c:if>
  • 相关阅读:
    HDOJ 1028 母函数分析
    尼姆博弈的典型例题
    HDOJ1232 畅通工程 DFS
    第一个八皇后
    HDOJ 1242
    我的“插入算法”实现
    第五讲 this 类变量 类方法
    我的“二分查找算法”实现
    我对锤子ROM 功能的看法——视觉篇
    第六讲 Java 四大特性:抽象 封装 继承 多态
  • 原文地址:https://www.cnblogs.com/notably/p/10561726.html
Copyright © 2020-2023  润新知