• jsp的三种自定义标签 写法示例


    1、自定义方法标签

    引入方式示例:

    <%@ taglib prefix="fns" uri="/WEB-INF/tlds/fns.tld" %>

    写法示例:

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 
     3 <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
     4   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     5   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
     6   version="2.0">
     7     
     8   <description>JSTL 1.1 functions library</description>
     9   <display-name>JSTL functions sys</display-name>
    10   <tlib-version>1.1</tlib-version>
    11   <short-name>fns</short-name>
    12   <uri>http://java.sun.com/jsp/jstl/functionss</uri>
    13 
    14   <!-- DictUtils -->
    15   
    16   <function>
    17     <description>获取字典对象列表</description>
    18     <name>getDictList</name>
    19     <function-class>com.sdyy.base.sys.utils.DictUtils</function-class>
    20     <function-signature>java.util.List getDictList(java.lang.String)</function-signature>
    21     <example>${fns:getDictList(typeCode)}</example>  
    22   </function>
    23   
    24   <function>
    25     <description>获取字典对象列表</description>
    26     <name>getDictListJson</name>
    27     <function-class>com.sdyy.base.sys.utils.DictUtils</function-class>
    28     <function-signature>java.lang.String getDictListJson(java.lang.String)</function-signature>
    29     <example>${fns:getDictListJson(typeCode)}</example>  
    30   </function>
    31   
    32   
    33   <function>
    34     <description>对象变json</description>
    35     <name>toJSONString</name>
    36     <function-class>com.alibaba.fastjson.JSON</function-class>
    37     <function-signature>java.lang.String toJSONString(java.lang.Object)</function-signature>
    38   </function>
    39 </taglib>
    function-class就是该方法的实体所在类路径,
    function-signature就是该方法的方法名,值得一提的是,这个方法必须是个static方法。
    example就是使用方法示例



    2、通过jsp自定义标签
    <%@ taglib prefix="sys" tagdir="/WEB-INF/tags/sys" %>

    如此 tags目录下的sys目录下的jsp形式的tag就会自动被加载,标签jsp写法示例:

     1 <%@ tag language="java" pageEncoding="UTF-8"%>
     2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
     3 <%@ taglib prefix="fns" uri="/WEB-INF/tlds/fns.tld" %>
     4 <%@ attribute name="typeCode" type="java.lang.String" required="true" description="字典code"%>
     5 <%@ attribute name="defaultValue" type="java.lang.String" description="默认选中"%>
     6 <%@ attribute name="style" type="java.lang.String" description="默认选中"%>
     7 <%@ attribute name="cls" type="java.lang.String" description="默认选中"%>
     8 <%@ attribute name="name" type="java.lang.String" description="默认选中"%>
     9 <select style="${style}" class="${cls}" name="${name}" id="${name}" >
    10     <option value="" >请选择...      </option>
    11     <c:if test="${not empty typeCode}">
    12         <c:forEach items="${fns:getDictList(typeCode)}" var='dict'>
    13             <option value='${dict.VALUE}' ${defaultValue==dict.VALUE?'selected':''}>${dict.TEXT}</option>
    14         </c:forEach>
    15     </c:if>
    16 </select>

    如此,jsp名就是标签名,例如这个jsp叫 select.jsp,那么它的用法就是

    <sys:select cls="formselect" name="MODULE_TYPE" typeCode="HOME_MODULE_TYPE" defaultValue="${record.MODULE_TYPE }" />

    3、通过tld文件和java代码自定义元素标签

    引入方式和1相同,写法示例如下:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"   
     3     "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
     4 <taglib>
     5     <tlib-version>1.0</tlib-version>
     6     <jsp-version>2.0</jsp-version>
     7     <short-name>bgt</short-name>
     8     <!-- backGroundTag -->
     9     <uri>http://www.sdyy.tag</uri>
    10     <tag>
    11         <name>hasUrlPerm</name>
    12         <tag-class>com.sdyy.common.tags.HasUrlPermissionTag</tag-class>
    13         <attribute>
    14             <name>link</name>
    15             <required>false</required>
    16             <rtexprvalue>true</rtexprvalue><!-- 是否支持恶劣表达式 -->
    17             <type>java.lang.String</type>
    18             <description>示例:acApplication/forMain.do</description>
    19         </attribute>
    20         
    21     </tag>
    22 </taglib>
    A、【判断标签】HasUrlPermissionTag标签是一个判断标签,通过该标签来决定标签包裹的内容是否显示,写法如下:

     1 package com.sdyy.common.tags;
     2 
     3 
     4 
     5 import javax.servlet.http.HttpServletRequest;
     6 import javax.servlet.jsp.JspException;
     7 import javax.servlet.jsp.tagext.BodyTagSupport;
     8 
     9 import com.sdyy.common.spring.interceptor.PermissionInterceptor;
    10 /**
    11  * 
    12  * @ClassName: HasUrlPermissionTag
    13  * @Description: 根据url判断权限标签
    14  * @author: liuyx
    15  * @date: 2015年12月21日上午11:15:32
    16  */
    17 public class HasUrlPermissionTag extends BodyTagSupport {
    18 
    19     private String link;//  acApplication/forMain.do
    20 
    21     @Override
    22     public int doStartTag() throws JspException { // 在标签开始处出发该方法
    23         
    24         HttpServletRequest request=(HttpServletRequest) pageContext.getRequest();
    25         //获取session中存放的权限
    26         
    27         //判断是否有权限访问
    28         if (PermissionInterceptor.isOperCanAccess(request, link)) {
    29             //允许访问标签body
    30             return BodyTagSupport.EVAL_BODY_INCLUDE;// 返回此则执行标签body中内容,SKIP_BODY则不执行
    31         } else {
    32             return BodyTagSupport.SKIP_BODY;
    33         }
    34 
    35     }
    36 
    37     @Override
    38     public int doEndTag() throws JspException {
    39         return BodyTagSupport.EVAL_BODY_INCLUDE;
    40     }
    41 
    42     public String getLink() {
    43         return link;
    44     }
    45 
    46     public void setLink(String link) {
    47         this.link = link;
    48     }
    49 
    50 }

    在JSP中的使用方式:

        <bgt:hasUrlPerm link="abc.do">
        <div>tttttttttttttttttest</div>
        </bgt:hasUrlPerm>

    B、【控件标签】,这种标签直接返回一个控件,不过是通过java代码生成的控件内容,写法示例:

      1 package com.sdyy.common.tags;
      2 
      3 import java.io.IOException;
      4 import java.util.ArrayList;
      5 import java.util.List;
      6 
      7 import javax.servlet.jsp.JspTagException;
      8 import javax.servlet.jsp.JspWriter;
      9 import javax.servlet.jsp.tagext.BodyTagSupport;
     10 
     11 /*import com.sdyy.base.ac.ac_permission.model.AcPermission;*/
     12 
     13 public class ButtonUrlTag extends BodyTagSupport {
     14     private static final long serialVersionUID = -7811902545513255473L; 
     15 
     16 
     17     //标签属性用户名
     18     private String user = null;
     19     //标签属性操作url
     20     private String url = null;
     21     //标签属性 js方法
     22     private String jsmethod = null;
     23     //标签属性image 按钮图片
     24     private String image = null;
     25     //标签属性 alt 提示
     26     private String alt = null;
     27     //标签属性操作value 按钮文本
     28     private String value  = null;
     29 
     30 
     31 
     32 
     33     /* 标签初始方法 */
     34     public int doStartTag() throws JspTagException{
     35         return super.EVAL_BODY_INCLUDE;
     36     }
     37 
     38 
     39     /* 标签结束方法 */
     40     public int doEndTag() throws JspTagException{
     41         pageContext.getSession();
     42         Boolean b = false;
     43         List list = new ArrayList();
     44         /*AcPermission p = new AcPermission();*/
     45         /*JDBCHibernate jdbca = new JDBCHibernate();*/
     46         try {
     47             /*list = jdbca.getHaveURLByUsernameList(user);*/
     48         } catch (Exception e1) {
     49             // TODO Auto-generated catch block
     50             e1.printStackTrace();
     51         }
     52         for(int i = 0;i < list.size(); i++){
     53             /*p = (AcPermission) list.get(i);*/
     54             if(1==1) {//p.getUrl().trim().equals(url.trim())){
     55                 b = true;
     56                 //如果jsmethod属性不为null 则把超链接href改为调用js
     57                 if(jsmethod!=null){
     58                     url = jsmethod;
     59                 }
     60             }
     61         }
     62         JspWriter out = pageContext.getOut();
     63         if(b){
     64             try {
     65                 //有权限 显示操作按钮
     66                 out.println("<a href='" +url+ "' class='regular'><img src='" + image + "' alt='" + alt +"' />" + value + "</a>");
     67             } catch (IOException e) {
     68                 e.printStackTrace();
     69             }
     70         }
     71 
     72         return super.SKIP_BODY;
     73     }
     74 
     75     /* 释放资源 */
     76     public void release(){
     77         super.release();
     78     }
     79 
     80 
     81     public String getUser() {
     82         return user;
     83     }
     84 
     85 
     86     public void setUser(String user) {
     87         this.user = user;
     88     }
     89 
     90 
     91     public String getUrl() {
     92         return url;
     93     }
     94 
     95 
     96     public void setUrl(String url) {
     97         this.url = url;
     98     }
     99 
    100 
    101     public String getImage() {
    102         return image;
    103     }
    104 
    105 
    106     public void setImage(String image) {
    107         this.image = image;
    108     }
    109 
    110 
    111     public String getAlt() {
    112         return alt;
    113     }
    114 
    115 
    116     public void setAlt(String alt) {
    117         this.alt = alt;
    118     }
    119 
    120 
    121     public String getValue() {
    122         return value;
    123     }
    124 
    125 
    126     public void setValue(String value) {
    127         this.value = value;
    128     }
    129 
    130     public String getJsmethod() {
    131         return jsmethod;
    132     }
    133 
    134 
    135     public void setJsmethod(String jsmethod) {
    136         this.jsmethod = jsmethod;
    137     }
    138 }
  • 相关阅读:
    【Leetcode_easy】720. Longest Word in Dictionary
    【Leetcode_easy】717. 1-bit and 2-bit Characters
    【Leetcode_easy】709. To Lower Case
    【Leetcode_easy】707. Design Linked List
    【Leetcode_easy】706. Design HashMap
    第38课 栈和队列的相互转化
    第7章 网络层协议(4)_IGMP协议
    第7章 网络层协议(3)_ARP协议
    第33课 双向循环链表的实现
    第32课 Linux内核链表剖析
  • 原文地址:https://www.cnblogs.com/sharpest/p/6114970.html
Copyright © 2020-2023  润新知