help!taglib的问题

SIGSEGV 2003-09-13 04:01:37
//test-taglib.tld

<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>test</shortname>
<info>no info</info>
<tag>
<name>switch</name>
<tagclass>tld.SwitchTag</tagclass>
<bodycontent>JSP</bodycontent>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<info>switch</info>
</tag>
<tag>
<name>case</name>
<tagclass>tld.CaseTag</tagclass>
<bodycontent>JSP</bodycontent>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>default</name>
<tagclass>tld.Default</tagclass>
<bodycontent>JSP</bodycontent>

</tag>
</taglib>

//test.jsp
<%@ page session="false" %>
<%@ taglib prefix="test" uri="/WEB-INF/jsp/test-taglib.tld"%>
<%
String value="a";
if(request.getParameter("value")!=null){
value=request.getParameter("value");
}

%>
<test:switch value=<%=value%>>
<test:case value="a">a</text:case>
<test:case value="b">b</text:case>
<test:case value="c">c</text:case>
<test:defaule>others</text:default>
</text:switch>

结果运行test.jsp
显示:Warning: validation was turned on but an org.xml.sax.ErrorHandler was not
set, which is probably not what is desired. Parser will use a default
ErrorHandler to print the first 10 errors. Please call
the 'setErrorHandler' method to fix this.
Error: URI=null Line=2: 组件类型“taglib”未被声明。
Error: URI=null Line=3: 组件类型“tlibversion”未被声明。
Error: URI=null Line=4: 组件类型“jspversion”未被声明。
Error: URI=null Line=5: 组件类型“shortname”未被声明。
Error: URI=null Line=6: 组件类型“info”未被声明。
Error: URI=null Line=7: 组件类型“tag”未被声明。
Error: URI=null Line=8: 组件类型“name”未被声明。
Error: URI=null Line=9: 组件类型“tagclass”未被声明。
Error: URI=null Line=10: 组件类型“bodycontent”未被声明。
Error: URI=null Line=11: 组件类型“attribute”未被声明。]

请高手帮忙!!!

...全文
57 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
SIGSEGV 2003-09-13
  • 打赏
  • 举报
回复
西西。粗心了点!给你无端添了很多麻烦。//bow
不过web.xml不能像你那样写,否则tomcat启动时就出错:
2003-09-13 23:20:46 - Ctx() : Validating web.xml
XmlMapper: Can't find resource for entity: -//Sun Microsystems, Inc.//DTD Web Ap
plication 2.3//EN --> http://java.sun.com/dtd/web-app_2_3.dtd "null"

liad 2003-09-13
  • 打赏
  • 举报
回复
<test:switch value="<%=value%>">
<test:case value="a">a</text:case>
<test:case value="b">b</text:case>
<test:case value="c">c</text:case>
<test:defaule>others</text:default>
</text:switch>
怎么一会是test,一会又是text,统一改为test
defaule=>default
乱七八糟的

最后
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>you are so careless</display-name>
<taglib>
<taglib-uri>/mytestlib</taglib-uri>
<taglib-location>/WEB-INF/tlds/test-taglib.tld</taglib-location>
</taglib>
</web-app>
liad 2003-09-13
  • 打赏
  • 举报
回复
//test-taglib.tld
<tag>
<name>default</name>
<tag-class>tld.DefaultTag</tag-class>
<body-content>JSP</body-content>

</tag>
tld.Default=>tld.DefaultTag
SIGSEGV 2003-09-13
  • 打赏
  • 举报
回复
还有,
//SwitchTag.java (编译好通过了)
package tld;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;

public class SwitchTag extends TagSupport {
private String value=new String();
private boolean complete;
public int doStartTag()throws JspException{
return EVAL_BODY_INCLUDE;
}
public void setValue(String value){
this.value=value;
}
public String getValue(){
return value;
}
public void setComplete(boolean b){
complete=b;
}
public boolean getComplete(){
return complete;
}
}

//CaseTag.java
package tld;

import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;

public class CaseTag extends TagSupport {
private String value=new String();

public void setValue(String value){
this.value=value;
}
public int doStartTag()throws JspException {
SwitchTag switchtag=(SwitchTag)findAncestorWithClass(this,SwitchTag.class);
if(switchtag.getComplete()){
return SKIP_BODY;
}

if(value!=null){
if(value.equals(switchtag.getValue())){
switchtag.setComplete(true);
return EVAL_BODY_INCLUDE;
}
return SKIP_BODY;
}
return SKIP_BODY;
}
}

//DefaultTag.java
package tld;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class DefaultTag extends TagSupport {
public int doStartTag(){
SwitchTag switchtag=(SwitchTag)findAncestorWithClass(this,SwitchTag.class);
if(switchtag.getComplete()){
return SKIP_BODY;
}
switchtag.setComplete(true);
return EVAL_BODY_INCLUDE;
}
}

谢谢帮忙!
SIGSEGV 2003-09-13
  • 打赏
  • 举报
回复
原文件如下:
//test.jsp
<%@ page session="false" %>
<%@ taglib prefix="test" uri="/mytestlib"%>
<%
String value="a";
if(request.getParameter("value")!=null){
value=request.getParameter("value");
}

%>
<test:switch value=<%=value%>>
<test:case value="a">a</text:case>
<test:case value="b">b</text:case>
<test:case value="c">c</text:case>
<test:defaule>others</text:default>
</text:switch>

//test-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.2</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>test</short-name>

<tag>
<name>switch</name>
<tag-class>tld.SwitchTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>

</tag>
<tag>
<name>case</name>
<tag-class>tld.CaseTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>default</name>
<tag-class>tld.Default</tag-class>
<body-content>JSP</body-content>

</tag>
</taglib>
SIGSEGV 2003-09-13
  • 打赏
  • 举报
回复
我把test-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.2</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>test</short-name>

<tag>
<name>switch</name>
<tag-class>tld.SwitchTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>

</tag>
<tag>
<name>case</name>
<tag-class>tld.CaseTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>default</name>
<tag-class>tld.Default</tag-class>
<body-content>JSP</body-content>

</tag>
</taglib>

还是出错,不过tomcat不提示错误了
ie:
Error: 500
Location: /examples/test.jsp
Internal Servlet Error:

org.apache.jasper.compiler.ParseException: C:\tomcat\webapps\examples\test.jsp(9,19) Attribute value should be quoted
at org.apache.jasper.compiler.JspReader.parseToken(Unknown Source)
at org.apache.jasper.compiler.JspReader.parseAttributeValue(Unknown Source)
at org.apache.jasper.compiler.JspReader.parseTagAttributes(Unknown Source)
at org.apache.jasper.compiler.Parser$Tag.accept(Unknown Source)
at org.apache.jasper.compiler.Parser.parse(Unknown Source)
at org.apache.jasper.compiler.Parser.parse(Unknown Source)
at org.apache.jasper.compiler.Parser.parse(Unknown Source)
at org.apache.jasper.compiler.Compiler.compile(Unknown Source)
at org.apache.tomcat.facade.JasperLiaison.jsp2java(Unknown Source)
at org.apache.tomcat.facade.JasperLiaison.processJspFile(Unknown Source)
at org.apache.tomcat.facade.JspInterceptor.requestMap(Unknown Source)
at org.apache.tomcat.core.ContextManager.processRequest(Unknown Source)
at org.apache.tomcat.core.ContextManager.internalService(Unknown Source)
at org.apache.tomcat.core.ContextManager.service(Unknown Source)
at org.apache.tomcat.modules.server.Http10Interceptor.processConnection(Unknown Source)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(Unknown Source)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(Unknown Source)
at java.lang.Thread.run(Thread.java:536)

liad 2003-09-13
  • 打赏
  • 举报
回复
新版本是tlib-version,而不是tlibversion了
SIGSEGV 2003-09-13
  • 打赏
  • 举报
回复
上网可以的。那些jspversion ,jsptaglibray 我都是随便写的,这会有问题吗?
Yssss1980 2003-09-13
  • 打赏
  • 举报
回复
问一个简单的问题

你的机子能上网吗?

如果不能上网,他就没有办法取得DTD,而导致错误
liad 2003-09-13
  • 打赏
  • 举报
回复
你的test-taglib.tld改了没有?
SIGSEGV 2003-09-13
  • 打赏
  • 举报
回复
谢谢两位。
不过我又试了,加了
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
同时也作了相应修改。
在web.xml中加入:
<taglib>
<taglib-uri>
/mytestlib
</taglib-uri>
<taglib-location>
/WEB-INF/tlds/test-taglib.tld
</taglib-location>
</taglib>

修改test.jsp:<%@ taglib prefix="test" uri="/mytestlib"%>

仍然出错;
tomcat端:
Warning: validation was turned on but an org.xml.sax.ErrorHandler was not
set, which is probably not what is desired. Parser will use a default
ErrorHandler to print the first 10 errors. Please call
the 'setErrorHandler' method to fix this.
Error: URI=null Line=5: 组件“taglib”在此不允许“tlibversion”。
Error: URI=null Line=5: 组件类型“tlibversion”未被声明。
Error: URI=null Line=6: 组件“taglib”在此不允许“jspversion”。
Error: URI=null Line=6: 组件类型“jspversion”未被声明。
Error: URI=null Line=7: 组件“taglib”在此不允许“shortname”。
Error: URI=null Line=7: 组件类型“shortname”未被声明。
Error: URI=null Line=9: 组件“taglib”在此不允许“tag”。
Error: URI=null Line=11: 组件“tag”在此不允许“tagclass”。
Error: URI=null Line=11: 组件类型“tagclass”未被声明。
Error: URI=null Line=12: 组件“tag”在此不允许“bodycontent”。

ie端:
Error: 500
Location: /examples/test.jsp
Internal Servlet Error:

org.apache.jasper.compiler.ParseException: C:\tomcat\webapps\examples\test.jsp(9,19) Attribute value should be quoted
at org.apache.jasper.compiler.JspReader.parseToken(Unknown Source)
at org.apache.jasper.compiler.JspReader.parseAttributeValue(Unknown Source)
at org.apache.jasper.compiler.JspReader.parseTagAttributes(Unknown Source)
at org.apache.jasper.compiler.Parser$Tag.accept(Unknown Source)
at org.apache.jasper.compiler.Parser.parse(Unknown Source)
at org.apache.jasper.compiler.Parser.parse(Unknown Source)
at org.apache.jasper.compiler.Parser.parse(Unknown Source)
at org.apache.jasper.compiler.Compiler.compile(Unknown Source)
at org.apache.tomcat.facade.JasperLiaison.jsp2java(Unknown Source)
at org.apache.tomcat.facade.JasperLiaison.processJspFile(Unknown Source)
at org.apache.tomcat.facade.JspInterceptor.requestMap(Unknown Source)
at org.apache.tomcat.core.ContextManager.processRequest(Unknown Source)
at org.apache.tomcat.core.ContextManager.internalService(Unknown Source)
at org.apache.tomcat.core.ContextManager.service(Unknown Source)
at org.apache.tomcat.modules.server.Http10Interceptor.processConnection(Unknown Source)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(Unknown Source)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(Unknown Source)
at java.lang.Thread.run(Thread.java:536)

再求助!急...

Yssss1980 2003-09-13
  • 打赏
  • 举报
回复
第一、你要使用JSP1.2以上的版本,才能得到比较好的taglib的支持

第二、tld文件要加上dtd声明
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
liad 2003-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>html</short-name>
<uri>/html</uri>
<description>
HTML examples for the Tag Patterns chapter.
</description>
完整例子可以参看
http://expert.csdn.net/Expert/topic/2113/2113148.xml?temp=7.198513E-03

81,091

社区成员

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

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