博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsp的三种自定义标签 写法示例
阅读量:6072 次
发布时间:2019-06-20

本文共 7311 字,大约阅读时间需要 24 分钟。

自定义标签可以大大方便我们的页面控件编写,并且可以实现很多统一的管理。

 

0、首先需要引入支持自定义标签的jar包,有两种方式,

一个是直接在maven里面引入依赖:

javax.servlet.jsp
javax.servlet.jsp-api
2.3.1

另一个是直接用你Tomcat自带的jsp-api

 

 

 两种方式取其中一种即可。

 

1、通过tld文件,自定义方法标签

 

tld的这种用法,让我们可以在jsp里直接使用类中定义的方法

引入方式示例,直接在jsp上引入tld标签文件:

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

 

写法示例(文件名fns.tld,存放位置在上面的uri中有定义):

JSTL 1.1 functions library
JSTL functions sys
1.1
fns
http://java.sun.com/jsp/jstl/functionss
获取字典对象列表
getDictList
com.sdyy.base.sys.utils.DictUtils
java.util.List getDictList(java.lang.String)
${fns:getDictList(typeCode)}
获取字典对象列表
getDictListJson
com.sdyy.base.sys.utils.DictUtils
java.lang.String getDictListJson(java.lang.String)
${fns:getDictListJson(typeCode)}
对象变json
toJSONString
com.alibaba.fastjson.JSON
java.lang.String toJSONString(java.lang.Object)
function-class就是该方法的实体所在类路径,
function-signature就是该方法的方法名,值得一提的是,这个方法必须是个static方法。
example就是使用方式写法示例
2、通过tag文件自定义控件标签(感谢评论区一楼指正)

此类标签,让我们可以在jsp里,通过传入一些参数,动态的生成jsp代码

 

引入方式示例:

<%@ taglib prefix="sys" tagdir="/WEB-INF/tags/sys" %>

注意,这里引入的是一个路径

如此 tags目录下的sys目录下的所有tag(感谢评论区一楼指正)都会自动被加载,标签tag写法示例(写法其实类似jsp):

<%@ tag language="java" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib prefix="fns" uri="/WEB-INF/tlds/fns.tld" %><%@ attribute name="typeCode" type="java.lang.String" required="true" description="字典code"%><%@ attribute name="defaultValue" type="java.lang.String" description="默认选中"%><%@ attribute name="style" type="java.lang.String" description="默认选中"%><%@ attribute name="cls" type="java.lang.String" description="默认选中"%><%@ attribute name="name" type="java.lang.String" description="默认选中"%>

这里我引入了两个taglib,是为了在该文件中使用它们,attribute则相当于参数,定义这些参数才能在使用的时候动态传入,注意还有一些关键字,比如这里的“cls”,就是因为“class”是关键字

如此,tag名就是标签名,例如这个tag叫 select.tag感谢评论区一楼指正),那么它的用法就是

 其中 “sys:select” 中 【sys】是我们在上面【引入方式示例】中定义的prefix,select和【select.tag】的红字部分是对应的

 

3、通过 tld文件 自定义判断标签、控件标签(偷个懒,写一块了)

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

1.0
2.0
bgt
http://www.sdyy.tag
hasUrlPerm
com.sdyy.common.tags.HasUrlPermissionTag
link
false
true
java.lang.String
示例:acApplication/forMain.do
A、【判断标签】HasUrlPermissionTag标签是一个判断标签,通过该标签来决定标签包裹的内容是否显示,写法如下:
package com.sdyy.common.tags;import javax.servlet.http.HttpServletRequest;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.BodyTagSupport;import com.sdyy.common.spring.interceptor.PermissionInterceptor;/** *  * @ClassName: HasUrlPermissionTag * @Description: 根据url判断权限标签 * @author: liuyx * @date: 2015年12月21日上午11:15:32 */public class HasUrlPermissionTag extends BodyTagSupport {    private String link;//  acApplication/forMain.do    @Override    public int doStartTag() throws JspException { // 在标签开始处出发该方法                HttpServletRequest request=(HttpServletRequest) pageContext.getRequest();        //获取session中存放的权限                //判断是否有权限访问        if (PermissionInterceptor.isOperCanAccess(request, link)) {            //允许访问标签body            return BodyTagSupport.EVAL_BODY_INCLUDE;// 返回此则执行标签body中内容,SKIP_BODY则不执行        } else {            return BodyTagSupport.SKIP_BODY;        }    }    @Override    public int doEndTag() throws JspException {        return BodyTagSupport.EVAL_BODY_INCLUDE;    }    public String getLink() {        return link;    }    public void setLink(String link) {        this.link = link;    }}

在JSP中的使用方式:

tttttttttttttttttest

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

package com.sdyy.common.tags;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.servlet.jsp.JspTagException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.BodyTagSupport;/*import com.sdyy.base.ac.ac_permission.model.AcPermission;*/public class ButtonUrlTag extends BodyTagSupport {    private static final long serialVersionUID = -7811902545513255473L;     //标签属性用户名    private String user = null;    //标签属性操作url    private String url = null;    //标签属性 js方法    private String jsmethod = null;    //标签属性image 按钮图片    private String image = null;    //标签属性 alt 提示    private String alt = null;    //标签属性操作value 按钮文本    private String value  = null;    /* 标签初始方法 */    public int doStartTag() throws JspTagException{        return super.EVAL_BODY_INCLUDE;    }    /* 标签结束方法 */    public int doEndTag() throws JspTagException{                Boolean b = false;        List list = new ArrayList();        /*AcPermission p = new AcPermission();*/        /*JDBCHibernate jdbca = new JDBCHibernate();*/        try {            /*list = jdbca.getHaveURLByUsernameList(user);*/        } catch (Exception e1) {            // TODO Auto-generated catch block            e1.printStackTrace();        }        for(int i = 0;i < list.size(); i++){            /*p = (AcPermission) list.get(i);*/            if(1==1) {
//p.getUrl().trim().equals(url.trim())){
b = true; //如果jsmethod属性不为null 则把超链接href改为调用js if(jsmethod!=null){ url = jsmethod; } } } JspWriter out = pageContext.getOut(); if(b){ try { //有权限 显示操作按钮 out.println("" + alt +"" + value + ""); } catch (IOException e) { e.printStackTrace(); } } return super.SKIP_BODY; } /* 释放资源 */ public void release(){ super.release(); } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } public String getAlt() { return alt; } public void setAlt(String alt) { this.alt = alt; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getJsmethod() { return jsmethod; } public void setJsmethod(String jsmethod) { this.jsmethod = jsmethod; }}

 

综上 标签一般都是通过tld和tag定义的,本文只是对其中几种基础用法罗列,希望对大家有所帮助。

转载地址:http://hrngx.baihongyu.com/

你可能感兴趣的文章
Linux常用命令
查看>>
Android开源代码解读の使用TelephonyManager获取移动网络信息
查看>>
想说一点东西。。。。
查看>>
css知多少(8)——float上篇
查看>>
NLB网路负载均衡管理器详解
查看>>
水平添加滚动条
查看>>
PHP中”单例模式“实例讲解
查看>>
VS2008查看dll导出函数
查看>>
VM EBS R12迁移,启动APTier . AutoConfig错误
查看>>
atitit.细节决定成败的适合情形与缺点
查看>>
iOS - Library 库
查看>>
MATLAB 读取DICOM格式文件
查看>>
spring事务管理(Transaction)
查看>>
django.contrib.auth登陆注销学习
查看>>
js执行本地exe文件的3种方法
查看>>
理解B树索引
查看>>
vi编辑器的命令集合
查看>>
Mysql利用binlog恢复数据
查看>>
解决 Windows启动时要求验证
查看>>
我的友情链接
查看>>