jsp中用java写标签id_jsp中自定义标签用法实例分析

本文实例讲述了jsp中自定义标签用法。分享给大家供大家参考。具体如下:

这里简单的写了一个自定义标签,自己定义标签的好处就是在jsp页面中可以使用自己定义的功能,完全与Java代码分离

1. tld文件如下:

首先是要写×.tld文件,当项目随着服务器启动的时候,会检查项目中有没有*tld文件。

写的tld文件

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"

version="2.1">

1.0

apsliyuan

http://my.oschina.net/aps

hellowTag

cn.itcast.apsliyuan.tag.HellowtTag

JSP

ApsliyuanTag

cn.itcast.apsliyuan.tag.ApsliyuanTag

JSP

2. 自定义标签类java代码如下:

//自定义标签的类

package cn.itcast.apsliyuan.tag;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.JspWriter;

import javax.servlet.jsp.tagext.TagSupport;

public class HellowtTag extends TagSupport{

/**

*

*/

private static final long serialVersionUID = 1781703371130382609L;

@Override

public int doStartTag() throws JspException {

// TODO Auto-generated method stub

JspWriter out = pageContext.getOut();

SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

try {

out.print(format.format(new Date()));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return EVAL_BODY_INCLUDE;

}

@Override

public int doEndTag() throws JspException {

// TODO Auto-generated method stub

JspWriter out = pageContext.getOut();

try {

out.print("


标签执行完毕了");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return EVAL_PAGE;

}

}

3. jsp引入自己定义标签代码如下:

//jsp中引入自己定义的标签

pageEncoding="UTF-8"%>

index.jsp

现在的时间是:


我爱的人是:

4. TagSupport代码如下:

//看看TagSupport中的源代码, 这个是适配器模式

public class TagSupport implements IterationTag, Serializable {

public static final Tag findAncestorWithClass(Tag from,

// TCK signature test fails with generics

@SuppressWarnings("unchecked")

Class klass) {

boolean isInterface = false;

if (from == null ||

klass == null ||

(!Tag.class.isAssignableFrom(klass) &&

!(isInterface = klass.isInterface()))) {

return null;

}

for (;;) {

Tag tag = from.getParent();

if (tag == null) {

return null;

}

if ((isInterface && klass.isInstance(tag)) ||

klass.isAssignableFrom(tag.getClass()))

return tag;

else

from = tag;

}

}

/**

* Default constructor, all subclasses are required to define only

* a public constructor with the same signature, and to call the

* superclass constructor.

*

* This constructor is called by the code generated by the JSP

* translator.

*/

public TagSupport() { }

/**

* Default processing of the start tag, returning SKIP_BODY.

*

* @return SKIP_BODY

* @throws JspException if an error occurs while processing this tag

*

* @see Tag#doStartTag()

*/

public int doStartTag() throws JspException {

return SKIP_BODY;

}

/**

* Default processing of the end tag returning EVAL_PAGE.

*

* @return EVAL_PAGE

* @throws JspException if an error occurs while processing this tag

*

* @see Tag#doEndTag()

*/

public int doEndTag() throws JspException {

return EVAL_PAGE;

}

/**

* Default processing for a body.

*

* @return SKIP_BODY

* @throws JspException if an error occurs while processing this tag

*

* @see IterationTag#doAfterBody()

*/

public int doAfterBody() throws JspException {

return SKIP_BODY;

}

// Actions related to body evaluation

/**

* Release state.

*

* @see Tag#release()

*/

public void release() {

parent = null;

id = null;

if( values != null ) {

values.clear();

}

values = null;

}

/**

* Set the nesting tag of this tag.

*

* @param t The parent Tag.

* @see Tag#setParent(Tag)

*/

public void setParent(Tag t) {

parent = t;

}

/**

* The Tag instance most closely enclosing this tag instance.

* @see Tag#getParent()

*

* @return the parent tag instance or null

*/

public Tag getParent() {

return parent;

}

/**

* Set the id attribute for this tag.

*

* @param id The String for the id.

*/

public void setId(String id) {

this.id = id;

}

/**

* The value of the id attribute of this tag; or null.

*

* @return the value of the id attribute, or null

*/

public String getId() {

return id;

}

/**

* Set the page context.

*

* @param pageContext The PageContext.

* @see Tag#setPageContext

*/

public void setPageContext(PageContext pageContext) {

this.pageContext = pageContext;

}

/**

* Associate a value with a String key.

*

* @param k The key String.

* @param o The value to associate.

*/

public void setValue(String k, Object o) {

if (values == null) {

values = new Hashtable();

}

values.put(k, o);

}

/**

* Get a the value associated with a key.

*

* @param k The string key.

* @return The value associated with the key, or null.

*/

public Object getValue(String k) {

if (values == null) {

return null;

} else {

return values.get(k);

}

}

/**

* Remove a value associated with a key.

*

* @param k The string key.

*/

public void removeValue(String k) {

if (values != null) {

values.remove(k);

}

}

/**

* Enumerate the keys for the values kept by this tag handler.

*

* @return An enumeration of all the keys for the values set,

* or null or an empty Enumeration if no values have been set.

*/

public Enumeration getValues() {

if (values == null) {

return null;

}

return values.keys();

}

// private fields

private Tag parent;

private Hashtable values;

/**

* The value of the id attribute of this tag; or null.

*/

protected String id;

// protected fields

/**

* The PageContext.

*/

protected PageContext pageContext;

}

doStartTag的返回值

在doStartTag返回的值决定的body部分的数据如何显示。

两个返回值:

0 – SKIP_BODY – 常量。不显示body。

1-EVAN_BODY_INCLUDE ;包含body部分的数据,正常显示。

3:在doEndTag也有两个返回值

决定后面的页面部分是否显示:

SKIP_PAGE : 不再显示后面的页面部分。

EVAL_PAGE : 显示后面的page部分。

希望本文所述对大家的JSP程序设计有所帮助。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值