关于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>?
轉載于:https://www.cnblogs.com/notably/p/10561726.html
總結
以上是生活随笔為你收集整理的关于jsp中jstl-core标签循环遍历的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 奋战杭电ACM(DAY9)1013
- 下一篇: Syntax error, parame