代码之家  ›  专栏  ›  技术社区  ›  rosemary

属性前缀fn与任何导入的标记库都不对应

  •  7
  • rosemary  · 技术社区  · 11 年前

    我尝试在Tomcatv7服务器上运行我的jsp代码,但失败了。

    org.apache.jasper.JasperException:/jsp/Checkout.jspx(行:32,列:51)属性前缀fn与任何导入的标记库都不对应

    但我的jsp代码有fn定义

    xmlns:fn=“http://java.sun.com/jsp/jstl/functions"

    我的jsp代码:Checkout.jspx

        <?xml version="1.0" encoding="UTF-8"?>
        <jsp:root
         xmlns:jsp="http://java.sun.com/JSP/Page"
         xmlns:c="http://java.sun.com/jsp/jstl/core"
         xmlns:fn="http://java.sun.com/jsp/jstl/functions" 
         xmlns:eshop="urn:jsptld:/WEB-INF/tlds/eshop.tld"
         version="2.1"
         >
        <jsp:directive.page
         language="java"
         contentType="application/xhtml+xml;charset=UTF-8"
         />
    <jsp:output omit-xml-declaration="false"/>
    <jsp:output
      doctype-root-element="html"
      doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
      doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
      />
    <c:url var="cssUrl" value="/css/eshop.jspx"/>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <title>Check Out</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>CheckOut</h2>
      <c:choose>
        <c:when test="${fn:length(shoppingCart) > 0}">
          <form action="">
            <input type="hidden" name="action" value="orderConfirmation"/>
            <table class="checkout">
              <tr>
                <th colspan="2">Delivery Details</th>
                </tr>
              <tr>
                <td>Contact Name:</td>
                <td><input type="text" name="contactName"/></td>
                </tr>
              <tr>
                <td>Delivery Address:</td>
                <td><input type="text" name="deliveryAddress"/></td>
                </tr>
              <tr>
                <th colspan="2">Credit Card Details</th>
                </tr>
              <tr>
                <td>Name on Credit Card:</td>
                <td><input type="text" name="ccName"/></td>
                </tr>
              <tr>
                <td>Credit Card Number:</td>
                <td><input type="text" name="ccNumber"/></td>
                </tr>
              <tr>
                <td>Credit Card Expiry Date:</td>
                <td><input type="text" name="ccExpiryDate"/></td>
                </tr>
              <tr>
                <td></td>
                <td><input type="submit" value="Confirm Order"/></td>
                </tr>
              </table>
            </form>
          </c:when>
        <c:otherwise>
          <p class="error">ERROR: You can't check out an empty shopping cart!</p>
          </c:otherwise>
        </c:choose>
      </div>
    </body>
    </html>
    </jsp:root>
    

    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" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
        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>eshop</display-name>
        <servlet>
            <description>
            </description>
            <display-name>ShopServlet</display-name>
            <servlet-name>ShopServlet</servlet-name>
            <servlet-class>eshop.ShopServlet</servlet-class>
            <init-param>
                <param-name>base</param-name>
                <param-value>/shop</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>com.mysql.jdbc.Driver</param-value>
            </init-param>
            <init-param>
                <param-name>dbURL</param-name>
                <param-value>jdbc:mysql://localhost:3306/shop</param-value>
            </init-param>
            <init-param>
                <param-name>dbUserName</param-name>
                <param-value>root</param-value>
            </init-param>
            <init-param>
                <param-name>dbPassword</param-name>
                <param-value></param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>ShopServlet</servlet-name>
            <url-pattern>/shop/*</url-pattern>
        </servlet-mapping>
        <session-config>
            <tracking-mode>COOKIE</tracking-mode>
        </session-config>
         </web-app>
    

    我应该如何解决这个问题?

    我在eclipse中再次加载了该项目,我只是更改了web.xml中的代码。

    servlet-mapping>
    <servlet-name>ShopServlet</servlet-name>
    <url-pattern>/ShopServlet</url-pattern>
    </servlet-mapping> 
    

    URL为:localhost:8080/eshopx/ShopServlet

    错误消息已更改

    description请求的资源不可用。

    1 回复  |  直到 11 年前
        1
  •  9
  •   user3360944    11 年前

    您需要在jsp中使用taglib声明

    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" 
        prefix="fn" %>