您的位置:首页 > Web前端 > JavaScript

JSTL - 自定义标签

2010-05-21 12:46 281 查看
自定义标签输出问题:

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

解决方法输入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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: