自定义标签库的问题

mumi0422 2005-09-13 02:48:38
一个简单的自定义标签程序,可是运行起来总是出错,程序如下:

/*
* 开发标签实现类
*/
package com.jspdev.ch14;

import java.io.IOException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;

/**
* 演示以实现Tag接口的方式来开发标签程序
*/
public class HelloTag_Interface implements Tag{

private PageContext pageContext;
private Tag parent;

public HelloTag_Interface() {
super();
}

/*
* 设置标签的页面的上下文
*/
public void setPageContext(final javax.servlet.jsp.PageContext pageContext) {
this.pageContext = pageContext;
}

/*
* 设置上一级标签
*/
public void setParent(final Tag parent) {
this.parent = parent;
}

/*
* 取得上一级标签
*/
public Tag getParent() {
return parent;
}

/*
* 开始标签时的操作
*/
public int doStartTag() throws JspTagException {
return SKIP_BODY;//返回SKIP_BODY,表示不计算标签体
}

/*
* 结束标签时的操作
*/
public int doEndTag() throws JspTagException {
try {
pageContext.getOut().write("Hello World!你好,世界!");
} catch (IOException e) {
throw new JspTagException("IO Error:"+e.getMessage());
}
return EVAL_PAGE;//容器将在标签结束时,继续计算jsp页面的其他部分
}

/*
* Release用于释放标签程序占用的资源,比如使用了数据库,那么应该关闭这个连接
*/
public void release() {

}
}
-------------------------------------------------------------------
mytag.tld

<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>A tag library exercising SimpleTag handlers.</description>
<tlib-version>1.0</tlib-version>

<short-name>examples</short-name>
<uri>/demotag</uri>
<description>学习标签</description>
<tag>
<description>Outputs Hello,World,从实现Tag接口起开发</description>
<name>hello_int</name>
<tag-class>com.jspdev.ch14.HelloTag_Interface</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
-------------------------------------------------------------------------
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>TagTest</display-name>
<taglib>
<taglib-uri>/demotag</taglib-uri>
<taglib-location>/WEB-INF/mytag.tld</taglib-location>
</taglib>
</web-app>
----------------------------------------------------------------------
jsp文件

<%@ taglib uri="/demotag" prefix="hello" %>
<%@ page contentType="text/html;charset=gb2312" language="java" %>

<html>
<head>
<title>first cumstomed tag</title>
</head>
<body>
<p>以下的内容从Taglib中显示:</p>
<p><i><hello:hello_int></i></p>
</body>
</html>


...全文
307 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzhzzh204553 2005-10-04
  • 打赏
  • 举报
回复
这应该是低级错误.
我在机子上帮你弄好一下,帮你找到了错误.
修改之后,至少在我的机子上,就可以运行了.
注意,你的tld文件.
****************************************************************************
<tag>
<description>Outputs Hello,World,从实现Tag接口起开发</description>
<name>hello_int</name>
<tag-class>com.jspdev.ch14.HelloTag_Interface</tag-class>
  <body-content>empty</body-content>
</tag>
*****************************************************************************
  按照这个文件,体内容为空,而你的JSP文件引用时,却写成了
*****************************************************************************
<p>以下的内容从Taglib中显示:</p>
<p><i><hello:hello_int></i></p>
*****************************************************************************
于是出现了异常.
org.apache.jasper.JasperException: /tags/mytag.jsp(10,14) According to TLD, tag hello:hello_int must be empty, but is not

把它改成<hello:hello_int/>,在我这里就可以了.结果显示为:
********************************************
以下的内容从Taglib中显示:

Hello World!??????
********************************************
虽然有乱码,但是你的问题解决了.接分了.

mycslife 2005-10-03
  • 打赏
  • 举报
回复
嘿嘿,只有我才能给你一个正确的,因为这个问题我搞了一个晚上,总算是弄出来了


<?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>examples</short-name>
<uri>/demotag</uri>
<description>A tag library exercising SimpleTag handlers.</description>

<tag>

<name>hello_int</name>
<tag-class>com.jspdev.ch14.HelloTag_Interface</tag-class>
<body-content>empty</body-content>
<description>Outputs Hello,World</description>
<variable>
<name-given>counts</name-given>
<scope>true</scope>
<description>a counts</description>
</variable>
<attribute>
<name>counts</name>
<description>a count</description>

</attribute>
<example>hello</example>

</tag>
</taglib>
mxlmwl 2005-09-16
  • 打赏
  • 举报
回复
你的description有非ASCII字符“Outputs Hello,World,从实现Tag接口起开发”,都用英文好了。
如果非要用中文字符,那就得把xml文件类型改一下了。
mumi0422 2005-09-16
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>examples</short-name>
<uri></uri>
<description>A tag library exercising SimpleTag handlers.</description>

<tag>
<description>Outputs Hello,World,从实现Tag接口起开发</description>
<name>hello_int</name>
<tag-class>com.jspdev.ch14.HelloTag_Interface</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>

这样写还是会出错:
XML parsing error on file /WEB-INF/tlds/mytag.tld
mxlmwl 2005-09-16
  • 打赏
  • 举报
回复
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0">
这个不对,这个是jsp2.0的校验dtd,有可能你的服务器不支持,在xml进行DTD校验的时候报错,你换个低一点的版本就行了。
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
应该可以的。
mumi0422 2005-09-16
  • 打赏
  • 举报
回复
还有有错误:
tag不允许在此description
mxlmwl 2005-09-16
  • 打赏
  • 举报
回复
fxy1(初学者) ( ) 信誉:100 说的我觉得不对,这个版本可以用的,我的很多tag都是使用这个DTD,而且structs1.2使用的就是这个DTD。

楼主报错的地方是XML parsing error on file /WEB-INF/tlds/mytag.tld
而你web.xml中明明写的是
<web-app>
<display-name>TagTest</display-name>
<taglib>
<taglib-uri>/demotag</taglib-uri>
<taglib-location>/WEB-INF/mytag.tld</taglib-location>
</taglib>
</web-app>

估计是楼主粗心导致的吧,可别让我们来帮你找这种低级的错误啊。

错误如下:
"hellotag_interface.jsp": org.apache.jasper.JasperException: XML parsing error on file /WEB-INF/tlds/mytag.tld: (line 2, col -1): 组件类型“taglib”未被声明。

你的这个错误也已经报出了你的tld文件没有被引用到啊。
fxy1 2005-09-16
  • 打赏
  • 举报
回复
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
这个DTD应该有问题,版本太低,所以有些XML结点没有定义,换一个,可以从Struct的标签库头贴来用。
collar_bird 2005-09-16
  • 打赏
  • 举报
回复
在web.xml中调用的是
.tld中的
short-name

试一下。
mumi0422 2005-09-16
  • 打赏
  • 举报
回复
把中文去掉也不行
fox_blue 2005-09-13
  • 打赏
  • 举报
回复
试试下面

<?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>examples</short-name>
<uri></uri>
<description>A tag library exercising SimpleTag handlers.</description>

<tag>
<description>Outputs Hello,World,从实现Tag接口起开发</description>
<name>hello_int</name>
<tag-class>com.jspdev.ch14.HelloTag_Interface</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
mumi0422 2005-09-13
  • 打赏
  • 举报
回复
<tag-class>中间是有横线的
lj0103 2005-09-13
  • 打赏
  • 举报
回复
<tag>
<description>Outputs Hello,World,从实现Tag接口起开发</description>
<name>hello_int</name>
<tag-class>com.jspdev.ch14.HelloTag_Interface</tag-class>
<body-content>empty</body-content>
</tag>

改成
<tag>
<description>Outputs Hello,World,从实现Tag接口起开发</description>
<name>hello_int</name>
<tagclass>com.jspdev.ch14.HelloTag_Interface</tagclass>
<bodycontent>empty</bodycontent>
</tag>
看看,
我记得好像<tagclass>中间是没有-的
mumi0422 2005-09-13
  • 打赏
  • 举报
回复
错误如下:
"hellotag_interface.jsp": org.apache.jasper.JasperException: XML parsing error on file /WEB-INF/tlds/mytag.tld: (line 2, col -1): 组件类型“taglib”未被声明。
我用JBuilder运行的
mumi0422 2005-09-13
  • 打赏
  • 举报
回复
mytag.tld
就是这个文件不对
我现在想知道这个文件的题头应该怎么写?
自定义标签的时候
难道那些题头代码都要自己一个个敲吗?

zeq258 2005-09-13
  • 打赏
  • 举报
回复
把错误信息贴出来!

你这样只有代码,不好找问题!

先顶!

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧