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

 public class CompleteForumPage implements Serializable{

     /**
*
*/
private static final long serialVersionUID = 1L;
private Forum forum;
private Integer currentPage;
private Integer pageSize;
private Integer totalCount;
private Integer totalPage;
private List<Comment>comments;
//省略get set construct方法 实际中是一定要的 }

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

 public class Forum implements Serializable{

     /**
*
*/
private static final long serialVersionUID = 1L;
//主键生成 用uuid
private String forum_id;
private String forum_title;
private String forum_header;
private String forum_description;
private Date create_time;
private Institution institution;
private User author
};

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

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

 public class Comment implements Serializable{

     /**
*
*/
private static final long serialVersionUID = 1L;
//数据库中是varchar 主键生成用uuid 吧
private String comment_id;
private String comment_details;
private Forum forum;
private User responser;
private Date create_time;
}

将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>也很重要 很常用  如

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

完整的是这样的

 <c:forEach begin="" end="${pageBean.totalPage }" var="ss" >
<c:if test="${ss==1&&pageBean.currentPage>1 }">
<li><a href="#">Previous</a></li>
</c:if> <li class="active"><a href="#">${ss } </a></li>
<c:if test="${ss==pageBean.totalPage&&pageBean.currentPage<pageBean.totalPage }">
<li><a href="#">Next</a></li>
</c:if>e'l
</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>

关于jsp中jstl-core标签循环遍历的使用的更多相关文章

  1. JSP 中 JSTL 页面标签的笔记

    jsp头部引入使用的标签 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%&g ...

  2. JavaScript 中的12种循环遍历方法

    原文:JavaScript 中的12种循环遍历方法 题目:请介绍 JavaScript 中有哪些循环和遍历的方法,说说它们的应用场景和优缺点? 1.for 循环 let arr = [1,2,3];f ...

  3. JSP中使用<c:forEach>标签循环遍历元素

    1.forEach标签元素 <c:forEach items="接收集合对象" var="迭代参数名称" varStatus="迭代状态,可访问 ...

  4. JSP页面通过c:forEach标签循环遍历List集合

    c:forEach>标签有如下属性: 属性 描述 是否必要 默认值items 要被循环的信息 否 无begin 开始的元素(0=第一个元素,1=第二个元素) 否 0end 最后一个元素(0=第一 ...

  5. JSP中 JSTL和EL标签的使用

    使用JSTL前的准备 想要使用JSTL,首先需要给工程导入JSTL的包(JSTL.jar和standard.jar). JSTL简介 JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应 ...

  6. jsp中jstl标签的类似 if - else 语句 的语法

    在jsp中引入jstl的标签库和函数库 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c&q ...

  7. 转载:jsp中jstl标签的类似 if - else 语句 的语法

    原文链接:http://www.cnblogs.com/wanggd/archive/2013/05/27/3101788.html 在jsp中引入jstl的标签库和函数库 <%@ taglib ...

  8. fn:indexOf()详解(jsp中JSTL标签库)

    fn:indexOf()函数返回一个字符串中指定子串的位置. 语法 fn:indexOf()函数的语法如下: ${fn:indexOf(<原始字符串>,<子字符串>)} 实例演 ...

  9. 关于jsp中jstl报错Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core

    有的时候在开发jsp时,需要使用jstl时,在jsp上面引用jstl却出现错误:Can not find the tag library descriptor for "http://jav ...

随机推荐

  1. c/c++ 智能指针 weak_ptr 使用

    智能指针 weak_ptr 使用 weak_ptr用途: 1,解决空悬指针问题 2,解决循环引用问题 weak_ptr特点:没有*操作和->操作 weak_ptr是不控制所指对象生存周期的智能指 ...

  2. Python 面向对象的特性2-----继承

    面向对象的三大特性 1.封装 根据职责将属性和方法封装到一个抽象的类中,然后类创建一个实实在在的对象,有了对象以后,就可以访问到对象内部的属性,或者让对象来调用一个已经封装好的方法. 2.继承 实现代 ...

  3. win32gui.Findwindow(parm1,parm2)查找窗口的句柄方法

    介绍之前先让大家了解一下win32gui的模块用法 和 获取窗口类名工具 使用Python时,有时也会要操作到系统窗口的一些东西,下面就介绍win32gui.Findwindow(param1,par ...

  4. Linux 27 岁了!盘点 Linux 的 27 件趣事

    Linux 27 岁了!盘点 Linux 的 27 件趣事 许多人认为10月5日是 Linux 系统的周年纪念日,因为这是 Linux 在1991年首次对外公布的时间.不过,你可能不知道的是,早在19 ...

  5. https的证书认证 iOS版

    一.证书链 SecTrustRef: SecTrustRef trust = challenge.protectionSpace.serverTrust; 需要先拿出一个 SecTrustRef 对象 ...

  6. C和指针 (pointers on C)——第七章:函数(上)

    第七章 函数 这一章对于有一定C的基础的人有一定优秀代码风格的人来说,并非非常虐.关于stdarg宏可能有些陌生.它负责可变參数列表的定义. 总结: 新式风格和旧式风格就不要提了.八百年前的事情. 函 ...

  7. Error response from daemon: --cluster-store and --cluster-advertise daemon configurations are incompatible with swarm mode

    将docker worker node加入swarm集群时,出现以下错误 1.试验环境: centos7 2.报错翻译:--cluster-store和--cluster-advertise后台配置与 ...

  8. [3] TensorFlow 深层神经网络

    深层神经网络简称为深度学习有两个非常重要的特性1. 多层2. 非线性 线性模型的局限性 :例如前面的神经网络有两层(不算输入层),但是它和单层的神经网络井没有区别,任意线性模型的组合仍然还是线性模型, ...

  9. forall 与 for loop 案例

    create table a_tab(ver number,id number);create table b_tab(ver number,id number);set timing on DECL ...

  10. ansible的playbook进行yum批量安装nginx最新版本

    环境:centos7 版本:nginx最新版本 软件: ansible 作用: 进行批量执行不同机器上,进行安装nginx版本 检查脚本是否正确: [root@ansible-test ansible ...