關於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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM