日期:2014-05-17  浏览次数:20835 次

关于自定义标签 为什么如果在tld文件中不配置uri,只在web.xml中配置taglib-uri后在JSP中引用无效呢?
关于自定义标签 为什么如果在tld文件中不配置uri,只在web.xml中配置taglib-uri后在JSP中引用无效呢?  

如果在tld文件中配置了uri,那直接在JSP中就可以正常引用了,那web.xml中配置taglib-uri还有什么用呢?  
第一, 我不想在tld文件中配置uri
第二, 我不想在JSP中直接引用tld文件的位置,
第三, 我只是想引用web.xml中配置的taglib-uri。

下面是web.xml tld jsp的配置和引用,请高手指点。
1)
HelloTaglib.tld (这里我没配url,如果这里加了<uri>/mytablib</uri>则web.xml中即使不配置tablib也可以在JSP中引用该uri并正常)
<?xml version="1.0" encoding="UTF-8"?>
<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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
  version="2.0">
   
  <description>Custom Tag Library</description>
  <tlib-version>1.0</tlib-version>
  <short-name>mytablib</short-name>  
  <tag>
  <name>hellotab</name>
  <tag-class>com.base.tag.HelloTag</tag-class>
  <body-content>empty</body-content>
  </tag>  
</taglib>

2)
Web.xml
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  version="2.5">

<jsp-config>
  <taglib>
  <taglib-uri>/mytablibURI</taglib-uri>
  <taglib-location>/WEB-INF/tlds/HelloTaglib.tld</taglib-location>
  </taglib>
 </jsp-config>
</web-app>


3)
JSP
<%@ page contentType="text/html;charset=gb2312" %>
<%@ taglib uri="/mytablibURI" prefix="my" %>
<html>
  <head><title><my:hellotab/></title></head>
   
  <body><my:hellotab/></body>
</html>

运行JSP后报以下错误: 提示找不到 /mytablibURI
org.apache.jasper.JasperException: JSP ファイル "/mytablibURI" が見つかりません
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:51)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:116)
org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:160)
org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:431)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:494)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1444)
org.apache.jasper.compiler.Parser.parse(Parser.java:138)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:216)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:154)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:315)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:282)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.