当前位置: 首页 > news >正文

taglib的使用

使用自定义的taglib可以是我们对页面数据的处理放在后台,不仅使用方便,而且影藏了处理逻辑,也更加的安全。

需要使用到servlet.jar

1.在web-inf下建立taglib.tld文件

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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>1.2</jsp-version>
    <short-name>app</short-name>
    <uri>http://com.hh/taglib</uri><!--页面引用的地址-->
    <display-name>My Tags</display-name>
    <tag>
        <name>myTaglib</name>
        <tag-class>com.hh.MyTaglib</tag-class>
        <attribute>
            <name>name</name>
            <required>true</required><!--是否必须输入-->
            <rtexprvalue>true</rtexprvalue><!--当为true时, 表示该自定义标签的该属性的值可以直接指定或者通过动态计算指定为false时表示只能直接指定,如能否直接使用el表达式-->
        </attribute>
        <attribute>
            <name>age</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
</taglib>

2.写jave类进行逻辑处理

package com.hh;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import java.io.IOException;

/**
 * Created by hh on 15-10-30.
 *需要引入servlet.jar
 */
public class MyTaglib  extends TagSupport{
    private String name;//需要对参数写get,set方法
    private int age;
    @Override
    public int doStartTag() throws JspException {
        return super.doStartTag();
    }

    /**
     * EVAL_BODY_INCLUDE:把Body读入存在的输出流中,doStartTag()函数可用
     * EVAL_PAGE:继续处理页面,doEndTag()函数可用
     * SKIP_BODY:忽略对Body的处理,doStartTag()和doAfterBody()函数可用
     * SKIP_PAGE:忽略对余下页面的处理,doEndTag()函数可用
     * EVAL_BODY_TAG:已经废止,由EVAL_BODY_BUFFERED取代
     * EVAL_BODY_BUFFERED:申请缓冲区,由setBodyContent()函数得到的BodyContent对象来处理tag的body,如果类实现了BodyTag,那么doStartTag()可用,否则非法
     * @return
     * @throws JspException
     */
    @Override
    public int doEndTag() throws JspException {
        JspWriter out = pageContext.getOut();
        try {
            out.print("你输入的是:"+name+",年龄是:"+age);
        }catch (IOException e){

        }
        return EVAL_BODY_INCLUDE;
    }

    public String getName() { return name;}

    public void setName(String name) {this.name = name;}

    public int getAge() { return age;}

    public void setAge(int age) { this.age = age;}
}

3.页面调用

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ taglib prefix="myTag" uri="http://com.hh/taglib" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h2>Hello World!</h2>
要显示的信息1:<myTag:myTaglib name="张三"></myTag:myTaglib><br>
要显示的信息2:<myTag:myTaglib name="张三" age="20"></myTag:myTaglib>
</body>
</html>

 

转载于:https://www.cnblogs.com/mouseIT/p/4924367.html

相关文章:

  • Oracle解锁封锁的账号
  • 期中总结
  • Web应用解决中文乱码的两种方式
  • Linux平台下线程同步,实现“生产者消费者问题”
  • aaaa
  • Hibernate懒加载策略
  • [redis] Jedis 与 ShardedJedis 设计
  • Ubuntu中使用GCC编译器出现:没有那个文件或目录
  • 使用 nvm 管理不同版本的 node 与 npm
  • 数据库连接失败Communications link failure due to underlying exception!
  • js遍历 子节点 子元素
  • Hinernate进行mysql数据库的逆向工程无法生成主外键关系
  • lintcode 中等题:find the missing number 寻找缺失的数
  • Myeclipse使用DB Browser连接数据库错误:OPTION SQL_SELECT_LIMIT=DEFAULT
  • C语言如何清除scanf()缓存
  • 【Leetcode】101. 对称二叉树
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • android 一些 utils
  • HTTP那些事
  • java中的hashCode
  • Js基础知识(一) - 变量
  • React-flux杂记
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • yii2中session跨域名的问题
  • 第2章 网络文档
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 浅谈Golang中select的用法
  • 我看到的前端
  • 一份游戏开发学习路线
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • #QT(一种朴素的计算器实现方法)
  • #Z2294. 打印树的直径
  • %@ page import=%的用法
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (6)设计一个TimeMap
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转载)(官方)UE4--图像编程----着色器开发
  • ./configure、make、make install 命令
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .Net Core与存储过程(一)
  • .Net Redis的秒杀Dome和异步执行
  • .net 设置默认首页
  • .net(C#)中String.Format如何使用
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @RequestParam,@RequestBody和@PathVariable 区别