JSTL - 自定义标签

自定义标签输出问题:

   

            好长时间没有做自定义标签了,最近做了一个分页标签,发现输出内容显示在也面最上面,

     解决方法输入this.pageContext.getOut().write();

     错误原因:输出的时候用了this.pageContext.getResponse().getWriter().println();

 

 

重新温习一下jsp自定义标签

 

  

 

1,jsp自定义标签类

package com.dafan.UserDefineTag;

import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

/**
* 自定义标签类
*/
public class JspFormatTag extends BodyTagSupport {

private static final long serialVersionUID = 1L;
private String begin;//一定要写get、set方法

public String getBegin() {
   return begin;
}

public void setBegin(String begin) {
   this.begin = begin;
}

public static long getSerialVersionUID() {
   return serialVersionUID;
}

/**
* 开始标签时执行
*/
public int doStartTag() throws JspTagException{//这个方法不用所以直接返回值  
   
   System.out.print("到过这里!");
        return EVAL_PAGE;  

      }  

/**
* 结束标签时执行
*/
public int doEndTag() throws JspTagException {
   try {
    //得到标签中的文本
    BodyContent tagbody = getBodyContent();
    JspWriter jspout = pageContext.getOut();
    String lsOutput = "";
   
    if (tagbody != null) {

     lsOutput = begin+":祝你成功!";
    }

    //将结果写回到数据流中
   
    //pageContext.getOut().write(lsOutput.trim());
    jspout.print(lsOutput);
    System.out.println(lsOutput);
   
   } catch (Exception e) {
    e.printStackTrace();
   }

  
   return EVAL_PAGE;//让JSP继续处理以下页面的内容
} 
}

/** ----------------------解释------------------------------------
* 返回值说明:
*    EVAL_BODY_INCLUDE:把Body读入存在的输出流中,doStartTag()函数常用
*    EVAL_PAGE:继续处理页面,doEndTag()、doStartTag()函数常用
*    SKIP_BODY:忽略对Body的处理,doStartTag()和doAfterBody()函数常用
*    SKIP_PAGE:忽略对余下页面的处理,doEndTag()函数常用
*    EVAL_BODY_TAG:已经废止,由EVAL_BODY_BUFFERED取代
*    EVAL_BODY_BUFFERED:申请缓冲区,由setBodyContent()函数得到的
*    BodyContent对象来处理tag的body,如果类实现了BodyTag,那么doStartTag()常用,否则非法
*    EVAL_BODY_AGAIN:请求继续处理body,返回自doAfterBody(),这个返回值在你制作循环tag的时候是很有用的。
*
*/

2,在web-inf下新建自定义标签的xml文件,扩展名为.tld

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://msplinks.com.cn/MDFodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVl"
xmlns:xsi="http://msplinks.com.cn/MDFodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZQ=="
xsi:schemaLocation="http://msplinks.com.cn/MDFodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVl/web-jsptaglibrary_2_0.xsd"
version="2.0">

<description>JspFormatTag</description>
<tlib-version>2.0</tlib-version>
<shortname>JspFormatTag</shortname>
<uri>FHTML</uri>
<info>HTML Encoding Tag</info>

<tag>
   <name>JspFormatTag</name>
   <tag-class>com.dafan.UserDefineTag.JspFormatTag</tag-class>
   <body-content>tagdependent</body-content>
   <attribute>
    <name>begin</name>
    <required>true</required>
   </attribute>
</tag>
</taglib>
<!--
说明:
   description 可选的标签特定信息
   tlib-version 标签库的版本
   short-name JSP页面编写工具可以用来创建助记名的可选名字
   uri 唯一标识该标签库的的URI
  
   jsp-version 这个标签库要求的JSP规范版本   
   display-name 将由工具显示的可选名
   small-icon 将由工具使用的可选小图标
   large-icon 可被工具使用的可选大图标   
   listener 见listener元素
  
tag标签: 
   name 唯一标签名
   tag-class 标签handler类的完全限定名
   tei-class javax.servlet.jsp.tagext.TagExtraInfo的可选子类。见提供有关脚本变量的信息。
   body-content 正文内容类型。见body-conten元素和 body-content元素。
   display-name 由工具显示的可选名
   small-icon 可以由工具使用的小图标
   large-icon 可以由工具使用的大图标
   description 可选的标签特定的信息
   variable 可选的脚本变量信息。见提供有关脚本变量的信息。
   attribute 标签属性信息。见Attribute 元素。 
  
注意引用的taglib的版本要和web.xml一直哦
-->

3,在web.xml中注册

<jsp-config>
   <taglib>
    <taglib-uri>FHTML</taglib-uri>
    <taglib-location>/WEB-INF/JspFormatTag.tld</taglib-location>
   </taglib>
</jsp-config>

4,在页面中使用

<%@ taglib uri="FHTML" prefix="mytag" %><!-- 自定义标签的引用 -->

<body>
    This is my JSP page. <br>
    <mytag:JspFormatTag begin="aa">fantest!</mytag:JspFormatTag>
</body>

 

 

 

参考资料:http://download.csdn.net/source/2387344

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值