JSP自定义方法标签
1、自定义方法标签
引入方式示例:
<%@ taglib prefix="fns" uri="/WEB-INF/tlds/fns.tld" %>
写法示例:
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0"> <description>JSTL 1.1 functions library</description>
<display-name>JSTL functions sys</display-name>
<tlib-version>1.1</tlib-version>
<short-name>fns</short-name>
<uri>http://java.sun.com/jsp/jstl/functionss</uri> <!-- DictUtils --> <function>
<description>获取字典对象列表</description>
<name>getDictList</name>
<function-class>com.sdyy.base.sys.utils.DictUtils</function-class>
<function-signature>java.util.List getDictList(java.lang.String)</function-signature>
<example>${fns:getDictList(typeCode)}</example>
</function> <function>
<description>获取字典对象列表</description>
<name>getDictListJson</name>
<function-class>com.sdyy.base.sys.utils.DictUtils</function-class>
<function-signature>java.lang.String getDictListJson(java.lang.String)</function-signature>
<example>${fns:getDictListJson(typeCode)}</example>
</function> <function>
<description>对象变json</description>
<name>toJSONString</name>
<function-class>com.alibaba.fastjson.JSON</function-class>
<function-signature>java.lang.String toJSONString(java.lang.Object)</function-signature>
</function>
</taglib>
function-class就是该方法的实体所在类路径,
function-signature就是该方法的方法名,值得一提的是,这个方法必须是个static方法。
example就是使用方法示例
2、通过jsp自定义标签(虽然里面是jsp的写法,但是扩展名要命名为.tag 2017-03-27 17:04 感谢评论区一楼指正)
<%@ taglib prefix="sys" tagdir="/WEB-INF/tags/sys" %>
如此 tags目录下的sys目录下的jsp(虽然里面是jsp的写法,但是扩展名要命名为.tag 2017-03-27 17:04 感谢评论区一楼指正)形式的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="默认选中"%>
<select style="${style}" class="${cls}" name="${name}" id="${name}" >
<option value="" >请选择... </option>
<c:if test="${not empty typeCode}">
<c:forEach items="${fns:getDictList(typeCode)}" var='dict'>
<option value='${dict.VALUE}' ${defaultValue==dict.VALUE?'selected':''}>${dict.TEXT}</option>
</c:forEach>
</c:if>
</select>
如此,jsp名就是标签名,例如这个jsp叫 select.tag(扩展名要命名为.tag 2017-03-27 17:04 感谢评论区一楼指正),那么它的用法就是
<sys:select cls="formselect" name="MODULE_TYPE" typeCode="HOME_MODULE_TYPE" defaultValue="${record.MODULE_TYPE }" />
3、通过tld文件和java代码自定义元素标签
引入方式和1相同,写法示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>bgt</short-name>
<!-- backGroundTag -->
<uri>http://www.sdyy.tag</uri>
<tag>
<name>hasUrlPerm</name>
<tag-class>com.sdyy.common.tags.HasUrlPermissionTag</tag-class>
<attribute>
<name>link</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue><!-- 是否支持恶劣表达式 -->
<type>java.lang.String</type>
<description>示例:acApplication/forMain.do</description>
</attribute> </tag>
</taglib>
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中的使用方式:
<bgt:hasUrlPerm link="abc.do">
<div>tttttttttttttttttest</div>
</bgt:hasUrlPerm>
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{
pageContext.getSession();
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("<a href='" +url+ "' class='regular'><img src='" + image + "' alt='" + alt +"' />" + value + "</a>");
} 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;
}
}
JSP自定义方法标签的更多相关文章
- 【转】Jsp自定义标签详解
一.前言 原本是打算研究EXtremeComponents这个jsp标签插件,因为这个是自定义的标签,且自身对jsp的自定义标签并不是非常熟悉,所以就打算继续进行扫盲,开始学习并且整理Jsp自定义标签 ...
- JSP 标准标签库(JSTL)
JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, ...
- 重温JSP学习笔记--JSP动作标签
上一篇笔记写的是jsp的三个指令九个内置对象,这篇随笔开始写jsp的动作标签,动作标签是由服务器(Tomcat)来解释执行,与java代码一样,都是在服务器端执行的,jsp动作标签有十几多个,这里只写 ...
- JSP 自定义标签
0 标签技术的API继承体系 1 作用 jsp自定义标签用于移除页面中的java代码 2 实现 2.1 标签处理类ViewIPTag.java package com.zsm.util; import ...
- jsp简单标签开发(一)
孤傲苍狼 @Override22 public void doTag() throws JspException, IOException {23 //得到代表jsp标签体的JspFragment24 ...
- jsp的标签
一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...
- JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)
1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% requ ...
- JSP自定义标签开发入门
一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; 首先我们需要大致了解开发 ...
- JavaBean用JSP调用和使用JSP动作标签的区别
javabean的类可以用jsp动作标签实例化并使用. <!-- 下面这句是对Javabean类person的引用,引用的实例是p2 --> <jsp:useBean id=&quo ...
随机推荐
- 前端-SuperSlide自动分页控制、自适应轮播图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- window和linux(centos7)安装mysql5.7
window mysql 安装步骤 社区版本下载地址: https://dev.mysql.com/downloads/file/?id=474802 下载完成后,得到mysql-installer- ...
- 学习总结-Redis
一,简介 redis(Remote Dictionary Server)是一种Nosql技术,它是一个开源的高级kv存储和数据结构存储系统,它经常被拿来和Memcached相比较,但是Memcache ...
- bugku | sql注入2
http://123.206.87.240:8007/web2/ 全都tm过滤了绝望吗? 提示 !,!=,=,+,-,^,% uname=admin&passwd=1' and '1 : 一个 ...
- python深浅拷贝的理解和区分
import copy a1 = ['s1','s2','s3'] #可变数据类型 a = [1,2,a1] b = a a1.append('s4') #浅拷贝 c = copy.copy(a) # ...
- 【C#学习笔记】 List.AddRange 方法
[官方笔记] 将指定集合的元素添加到 List 的末尾 命名空间:System.Collections.Generic程序集:mscorlib(在 mscorlib.dll 中) public: vo ...
- USACO 6.4 章节
The Primes 题目大意 5*5矩阵,给定左上角 要所有行,列,从左向右看对角线为质数,没有前导零,且这些质数数位和相等(题目给和) 按字典序输出所有方案... 题解 看上去就是个 无脑暴搜 题 ...
- JavaScript-打开新窗口(window.open)和 关闭窗口(window.close)
JavaScript-打开新窗口 open() 方法可以查找一个已经存在或者新建的浏览器窗口. 语法: window.open([URL], [窗口名称], [参数字符串]) 参数说明: URL:可选 ...
- JVM系列(二) — Java垃圾收集介绍
这篇文章主要从以下几个方面介绍垃圾收集的相关知识 一.判断对象是否已死 二.主流垃圾收集算法 三.内存分配与回收策略 本章节主要从以下几个思考点着手介绍垃圾回收的相关知识:哪些内存需要回收?什么时候回 ...
- SQLAlchemy应用到Flask中
安装模块 pip install Flask-SQLAlchemy 加入Flask-SQLAlchemy第三方组件 from flask import Flask # 导入Flask-SQLAlche ...