jsp自定义tag在项目中的应用



 JSP中的代码越来越多,冗余的内容自然也就多了,往往一个很小的改动你需要去改动N个页面,工作量大不说,还容易出错。今天带你彻底解决这个问题!

tips:

  1. 图片点击放大

 

本文介绍的是jsp:tag中的一般使用方式,另外一种叫做:jsp:tld,两者同时使用并不冲突。我们习惯T们称作页面控件,通常一个项目中这两者都会使用到。

扫描二维码关注公众号,回复: 258306 查看本文章
  1. jsp:tag主要做页面进行逻辑处理后显示,最后的效果就是你可以给T一些参数,T会处理后把产生的结果显示在页面中。举个栗子:<c:if>,<c:for>,<c:set> 都是这样实现的,不信你ctrl点进去看看呗。
  2. jsp:tld会映射到一个具体的类的方法,最后的效果就是你可以在页面上写个标签就可以把数据库的数据显示到页面中。举个栗子:<sec:authorize>,<shiro:hasRole>,不信你再试试。。。。哈哈哈哈
  3. 显示只是其中一种用法,你可以根据你的业务场景和脑洞去想T可以有多少种用法,因为这个标签属于你。
  4. tld在本篇中并没有去介绍T的使用方式,以后可以补上:[JSP]tld在项目中的应用

 

 

1.创建Tag文件

 

我的习惯是先在WEB-INF下创建一个tag文件夹,再按照功能的不同,或者模块的不同划分再划分一个文件夹。比如:WEB-INF/tags/layout

 再创建我的Tag。比如:***.tag

 

<%--
  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"/>

 

最后的效果:一个加载好数据的下拉选项框。

  1. 如果其他地方需要这个内容我只需要将上面代码再复制一行到其他页面中即可,
  2. 如果哪天因为需求的变化,页面的显示效果需要修改,我找到我的tag修改完毕后所有使用这个控件的地方都被修改了。

猜你喜欢

转载自andinker.iteye.com/blog/2394358