【问题标题】:JSP custom tags not working in Tomcat 8.0JSP 自定义标签在 Tomcat 8.0 中不起作用
【发布时间】:2015-04-23 13:12:39
【问题描述】:

我似乎无法让 JSP 自定义标签在我的 JSPX 2.1 项目中工作,使用 Tomcat 8 用于爱情或金钱,使用 Eclipse Java EE IDE for Web Developers 4.4.1,在 Firefox 35.0.1 Windows 8.1 中进行测试。

症状:没有错误消息,它们只是被传递并且标签没有被处理,因为我在其中用于调试的打印语句根本没有执行。内置的 JSTL 标签可以轻松工作。

在我的头撞到墙上一段时间后,我继续尝试另一个自定义标签。这也不起作用,同样的症状。

我尝试过的事情: 我已经将我的代码与书中预先构建的示例 Web 项目进行了比较——这个项目中的自定义标签被调用并正常执行,所以我怀疑这与项目配置有关——虽然我不知道,但是拖网通过 Eclipse 中的属性页面没有显示任何明显的差异。 我还比较了上述示例中的 web.xml 配置和 .tld 配置,将它们的版本号和 .xsd 引用调整为相同,以防出现此问题。 我查看了类似的问题,它们具体与在 Maven 中构建对 Tomcat 7 的依赖关系有关,我专门检查了这些项目的依赖关系,并相信它们是相同的。

.tld 文件(在 WEB-INF 目录中)

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_1.xsd ">
<description>Auctioneers custom tags</description>
<tlib-version>1.0</tlib-version>
<short-name>dauct</short-name>
<tag>
    <description>Create a user</description>
    <display-name>createUser</display-name>
    <name>createUser</name>
    <tag-class>derbyauct.users.UserInsertTag</tag-class>
    <body-content>empty</body-content>
    <attribute>
        <name>user</name>
        <rtexprvalue>true</rtexprvalue>
        <type>derbyauct.users.UserCreation</type>
    </attribute>
</tag>
<tag>
    <description>Returns auctions at status ready</description>
    <display-name>returnReadyAuctions</display-name>
    <name>returnReadyAuctions</name>
    <tag-class>derbyauct.auctions.NextAuctionTag</tag-class>
    <body-content>empty</body-content>
</tag>

web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns="http://java.sun.com/xml/ns/j2ee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" 
    id="WebApp_ID" 
    version="2.5">
      <display-name>auctioneers</display-name>
      <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
      <servlet>
        <description>
        </description>
            <display-name>AuctServlet</display-name>
            <servlet-name>AuctServlet</servlet-name>
            <servlet-class>auct.AuctServlet</servlet-class>
          <init-param>
        <param-name>base</param-name>
        <param-value>/dauct</param-value>
        </init-param>
      <init-param>
        <param-name>imageURL</param-name>
        <param-value>/images/</param-value>
        </init-param>
      <init-param>
        <param-name>jdbcDriver</param-name>
        <param-value>org.mariadb.jdbc.Driver</param-value>
        </init-param>
      <init-param>
        <param-name>dbURL</param-name>
        <param-value>jdbc:mysql://localhost:3306/derbyauct</param-value>
        </init-param>
      <init-param>
        <param-name>dbUserName</param-name>
        <param-value></param-value>
        </init-param>
      <init-param>
        <param-name>dbPassword</param-name>
        <param-value></param-value>
        </init-param>
      </servlet>
    <servlet-mapping>
        <servlet-name>AuctServlet</servlet-name>
        <url-pattern>/dauct/</url-pattern>
      </servlet-mapping>
    </web-app>

标签处理程序

package auct.users;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.ServletContext;

import auct.utils.DALManager;
import auct.users.UserCreation;

public class UserInsertTag extends TagSupport {

    static final long serialVersionUID = 1L;
    private UserCreation user;

    public UserCreation getUser() {
        return user;
    }

    public void setUser(UserCreation user) {
        this.user = user;
        System.out.println("user object :" + user);
    }

    public int doEndTag() throws JspException {
        ServletContext context = pageContext.getServletContext();
        DALManager dm = (DALManager)context.getAttribute("dalManager");
        try {
            dm.insertUser(user);
        }
        catch (Exception e) {}
        return EVAL_PAGE;
    }
}

JSPX文件调用标签

<?xml version="1.0" encoding="ISO-8859-1" ?>
<jsp:root 
    xmlns:jsp="http://java.sun.com/JSP/Page"
    xmlns:dauct="urn:jspltd:/WEB-INF/tlds/dauct.tld"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    version="2.3"
>
<jsp:directive.page 
    language="java"
    contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" />
<jsp:text>
    <![CDATA[ <?xml version="1.0" encoding="ISO-8859-1" ?> ]]>
    </jsp:text>
    <jsp:text>
        <![CDATA[ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ]]>
    </jsp:text>
<c:url var="cssUrl" value="/css/dauct.jspx"/>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>User</title>
  <link rel="stylesheet" href="${cssUrl}" type="text/css"/>
  </head>
<body>
<jsp:include page="TopMenu.jspx" flush="true"/>
<jsp:include page="LeftMenu.jspx" flush="true"/>
<div class="content">
  <h2>Registration Complete</h2>
  <jsp:useBean id="user" class="auct.users.UserCreation" scope="request"/>
  <jsp:setProperty property="*" name="user"/>
 <dauct:createUser user="${user}"/>
      <p class="info">
        Thank you for registering.<br/>
        Welcome to Auctioneers <c:out value="${user.firstName}"/>
        </p>
  </div>
</body>
</html>
</jsp:root>

lib 文件夹

annotations-api.jar
catalina-ant.jar
catalina-ha.jar
catalina-storeconfig.jar
catalina-tribes.jar
catalina.jar
ecj-4.4.jar
el-api.jar
jasper-el.jar
jasper.jar
javax.servlet.jsp.jstl-1.2.1.jar
javax.servlet.jsp.jstl-api-1.2.1.jar
jsp-api.jar
list.txt
mariadb-java-client-1.1.8.jar
mysql-connector-java-5.1.34-bin.jar
servlet-api.jar
tomcat-api.jar
tomcat-coyote.jar
tomcat-dbcp.jar
tomcat-i18n-es.jar
tomcat-i18n-fr.jar
tomcat-i18n-ja.jar
tomcat-jdbc.jar
tomcat-jni.jar
tomcat-spdy.jar
tomcat-util-scan.jar
tomcat-util.jar
tomcat-websocket.jar
websocket-api.jar

【问题讨论】:

    标签: jsp tomcat jsp-tags


    【解决方案1】:

    尝试使用指令 taglib &lt;%@taglib prefix="c" uri=""%&gt; 将标签导入 JSP 文件

    【讨论】:

    • 当我使用 XHTML 时,我不确定这是正确的语法。我在 jsp:root 下有一个 'xmlns:dauct="urn:jspltd:/WEB-INF/tlds/dauct.tld"' 条目,我相信它可以实现同样的目的。
    • 我从未使用过 XHTML,这就是为什么我建议您使用此 sintax,因为您使用的是 JSP
    猜你喜欢
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多