JSP中的代碼越來越多,冗余的內容自然也就多了,往往一個很小的改動你需要去改動N個頁面,工作量大不說,還容易出錯。今天帶你徹底解決這個問題!
tips:
- 圖片點擊放大
本文介紹的是jsp:tag中的一般使用方式,另外一種叫做:jsp:tld,兩者同時使用並不沖突。我們習慣T們稱作頁面控件,通常一個項目中這兩者都會使用到。
- jsp:tag主要做頁面進行邏輯處理后顯示,最后的效果就是你可以給T一些參數,T會處理后把產生的結果顯示在頁面中。舉個栗子:<c:if>,<c:for>,<c:set> 都是這樣實現的,不信你ctrl點進去看看唄。
- jsp:tld會映射到一個具體的類的方法,最后的效果就是你可以在頁面上寫個標簽就可以把數據庫的數據顯示到頁面中。舉個栗子:<sec:authorize>,<shiro:hasRole>,不信你再試試。。。。哈哈哈哈
- 顯示只是其中一種用法,你可以根據你的業務場景和腦洞去想T可以有多少種用法,因為這個標簽屬於你。
- tld在本篇中並沒有去介紹T的使用方式,以后可以補上:[JSP]tld在項目中的應用
1.創建Tag文件
我的習慣是先在WEB-INF下創建一個tag文件夾,再按照功能的不同,或者模塊的不同划分再划分一個文件夾。比如:WEB-INF/tags/layout
再創建我的Tag。比如:***.tag
<%-- Created by IntelliJ IDEA. User: ta0477 Date: 16/7/20 Time: 16:47 To change this template use File | Settings | File Templates. --%> <%@ tag language="java" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!--對象--> <%@ attribute name="nowSitet" type="com.wttech.tciss.jsxy.core.vo.statistics.ShutdownSite" required="false" description="當前時間節點temp"%> <%@ attribute name="shutdownSitest" type="java.util.List" required="false" description="年度列表數據temp"%> <!--屬性名稱--> <%@ attribute name="selectName" type="java.lang.String" required="false" description="選擇框Name"%> <%@ attribute name="selectId" type="java.lang.String" required="false" description="選擇框Id"%> <%@ attribute name="selectDes" type="java.lang.String" required="false" description="選擇框文字描述"%> <!--業務邏輯: 做法:將一個對象和集合復制給另外一到另外一對屬性中去 目的:防止控制設置的參數名稱與tag使用的參數名不統一的問題 --> <c:if test="${null!=nowSitet&&null!=shutdownSitest}"> <c:set var="nowSite" scope="request" target="nowSite" value="${nowSitet}"/> <c:set var="shutdownSites" scope="request" target="shutdownSites" value="${shutdownSitest}"/> </c:if> <th class="r" width="116">${not empty selectDes?selectDes:"年度信息"}:</th> <td width="220"> <select id="${not empty selectId?selectId:'shutdownSiteId'}" name="${not empty selectName?selectName:'shutdownSiteName'}" class="form-control w210px"> <c:forEach var="site" items="${shutdownSites}"> <c:choose> <c:when test="${v.id==nowSite.id}"> <option value="${site.id}" selected>${site.year}</option> </c:when> <c:otherwise> <option value="${site.id}">${site.year}</option> </c:otherwise> </c:choose> </c:forEach> </select> </td>
2.使用Tag文件
我這里的需求是這樣:很多頁面都需要加年度選項來查詢數據,這些數據都來自於我的后台數據庫中(這個需求用tld更合適一些,我就是想舉個栗子不許噴我),前台展示的方式都是使用select來展示。
我先在common.jsp中加入我的jsp:tag
<!--顯示控件tag--> <%@ taglib prefix="layout" tagdir="/WEB-INF/tags/layout" %>
在頁面中使用我的jsp:tag
<layout:shudownsitelist selectId="shutdownSIteID" selectName="shutdownSIteID"/>
最后的效果:一個加載好數據的下拉選項框。
- 如果其他地方需要這個內容我只需要將上面代碼再復制一行到其他頁面中即可,
- 如果哪天因為需求的變化,頁面的顯示效果需要修改,我找到我的tag修改完畢后所有使用這個控件的地方都被修改了。
希望這篇文章對你有所幫助,幫我點個贊吧。!!!!
歡迎你來和我交流學習。
原創禁止轉載!!!!!!