jsp页面自定义标签的几种方式

先引用jar包


    javax.servlet.jsp
    jsp-api
    2.2
    provided

一:tld文件加jsp模式(此方法可动态设置jsp页面的 js,通过调用控制层获取js,可通过将某部分js储存在数据库,通过这种方式,获取想要的js);

fns.tld文件内容:
 




    
  JSTL 1.1 functions library
  JSTL functions sys
  1.1
  fns
  http://java.sun.com/jsp/jstl/functionss

  
 
  
    测试弹窗
    getAlertJs
    com.aoro.controller.UserController
    java.lang.String getjs2()
    ${fns:getAlertJs()}  
  
 

对应jsp页面用法:

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

 

//上面调用的getjs2方法是${fns:getAlertJs()}获取的,即com.aoro.controller.UserController  getjs2()方法返回的东西

该控制层的方法为:

public static String getjs2(){
        return "function getjs2(){alert('自定义标签测试')}";
    }

所以jsp调用的getjs2()方法即为控制层return内容

二:tag文件加jsp模式(此方法可动态设置页面上按钮,选择框等html各种元素);

test.tag文件内容:

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

tag文件里面可以添加html元素,可通过jstl循环等各个功能,还可以引入tld文件,并通过tld文件获取数据,可动态设置各种页面按钮,表格,选择框,等元素,上面只记录一个按钮,由于刚才已经引用过fns.tld并获取到了getjs2()方法则jsp页面只需要引用tag文件并用上就行了;

jsp页面引用如下:

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

将test.tag文件放在/WEB-INF/tags/sys文件夹下即可,引用时如下

//sys即为红色字体部分,test为对应的文件,我这个文件为test.tag,所以有此引用;

三:tld复杂版,

bgt.tld文件内容如下:
 




   1.0
   2.0
   Example TLD with Body

   
      Hello
      com.aoro.controller.HasUrlPermissionTag
      scriptless

      
        message
      





jsp页面引用:

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

用法有两种,一种是直接夹在标签中间;另一种是直接在标签中属性里面给值;如下:


  自定义标签,我是标签中间的内容;
 

由于tld文件调用了java文件,此处贴出java文件代码:

/**
 * 创建日期:2018年8月15日上午10:33:22
 */
package com.aoro.controller;

import java.io.IOException;
import java.io.StringWriter;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;

/**
 * @author Administrator
 * 创建日期:2018年8月15日上午10:33:22
 */
public class HasUrlPermissionTag extends SimpleTagSupport {

	//自定义标签属性,属性的名称是message
	private String message;

	public void setMessage(String msg) {
		this.message = msg;
	}
	StringWriter sw = new StringWriter();
	
	public void doTag() throws JspException, IOException {
		if (message != null) {
			/* Use message from attribute */
			JspWriter out = getJspContext().getOut();
			out.println( message );
		} else {
			/* use message from the body */
			getJspBody().invoke(sw);
			getJspContext().getOut().println(sw.toString());
		}
   }
}

上面方法可变化一下,获取数据表格如下:

table.tld:

    




    1.2
    2.0
    c
    controller

    
        NewTable
        com.aoro.controller.testTable
        
            number
            true
        
    

引用的testTable如下:

/**
 * 创建日期:2018年8月15日下午3:52:41
 */
package com.aoro.controller;

import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

import org.apache.commons.collections.CollectionUtils;

import org.springframework.beans.factory.annotation.Autowired;

import com.aoro.model.User;
import com.aoro.service.UserService;
import com.aoro.util.DataUtils;
import com.aoro.common.spring.SpringContextHolder;

/**
 * @author Administrator
 * 创建日期:2018年8月15日下午3:52:41
 */
public class testTable extends TagSupport{
	
	@Autowired
	private UserService userService;
	
	private String number;

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public int doStartTag() throws JspException {
        JspWriter out = pageContext.getOut();
        try {
         //   Class.forName("com.mysql.jdbc.Driver");
         //   Connection con = DriverManager.getConnection("jdbc:mysql://localhost/testdb?useSSL=false&characterEncoding=utf8", "root", "123456");
         //   PreparedStatement ps = con.prepareStatement("SELECT name,education,age FROM `employees` ORDER BY id DESC limit "+this.number);
            //ps.setInt(1, Integer.parseInt(this.number));
         //   System.out.println("number => "+this.number);
         //   ResultSet rs = ps.executeQuery();
        	
            //此处是获取数据,我这里调用了一个接口,可根据自己项目,调用自己的数据
            if(userService == null){
        		userService = SpringContextHolder.getBean("userService");
            }
        	List userlist = userService.findAll();
            if (CollectionUtils.isNotEmpty(userlist)) {
                // column name
                out.write("");
                out.write("");
                out.write("");
                out.write("");
                // column value
                if(DataUtils.asInt(this.number)<=userlist.size()){
                	for(int i=0;i");
                        out.write("");
                        out.write("");
                    }
                }
                
                out.write("
userid姓名年龄
" + userlist.get(i).getUserId() + "" + userlist.get(i).getUserName() + "" +userlist.get(i).getAge() + "
"); } // con.close(); } catch (Exception e) { System.out.println(e); } return SKIP_BODY; // return BodyTagSupport.EVAL_BODY_INCLUDE; 返回此则执行标签body中内容,SKIP_BODY则不执行 } }

jsp页面引用如下:

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

newtable:对应prefix="newtable";

NewTable 对应table.tld文件中的 tag NewTable

number 对应 table.tld文件中的 参数


            number
            true
       

 

你可能感兴趣的:(jsp页面自定义标签的几种方式)