0

当我尝试使用地图自定义标签时,我收到Error: 500一条消息File "/customTag" not found

这是我的尝试:myTag.tld

<taglib version="2.0" xmlns="http://java.sun.com/xml/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    >
    <uri>customTag</uri>
    <tlib-version>1.0</tlib-version>
    <tag>
        <name>multiplier</name>
        <tag-class>myPack.MultiplierTag</tag-class>
        <attribute>
                <name>input</name>
                <required>true</required>
                <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>

</taglib>

jsp页面

<%@taglib uri="/customTag" prefix="operator"%>
<%
    String input = request.getParameter("input");
%>
<operator:multiplier input="<%=input%>"></operator:multiplier>

当我尝试.tld使用文件名访问文件时,一切都很好

4

2 回答 2

1

在 TLD 文件中:添加短名称并将 uri 从 customTag 更改为 /customTag

<short-name>operator</short-name>
<uri>/customTag</uri>

在 JSP 中

<@ taglib prefix="operator" uri="/customTag" />

于 2013-12-14T18:10:26.647 回答
1

我不是 JEE 专家,但我只是tld根据您的示例和Head First: Servlets and JSP中的示例创建了自己的示例,似乎:

  • uri您需要指定您将使用的名称,<%@taglib uri="..."所以如果是,<uri>customTag</uri>那么您需要将其用作<%@taglib uri="customTag"
  • 您的标签未指定body-content,对于您的示例,可以将其设置为empty

因此,请尝试使用您可以放入的这个 tld/WEB-INF/tlds/myTag.tld

<taglib version="2.0" xmlns="http://java.sun.com/xml/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
    <uri>customTag</uri>
    <tlib-version>1.0</tlib-version>
    <tag>
        <name>multiplier</name>
        <tag-class>myPack.MultiplierTag</tag-class>
        <body-content>empty</body-content>
        <attribute>
                <name>input</name>
                <required>true</required>
                <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
</taglib>

对于实施,您可以使用

package myPack;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class MultiplierTag extends SimpleTagSupport {
    private String input;

    public void doTag() throws JspException, IOException {
        getJspContext().getOut().write("Hello " + input + " <br>");
    }

    public void setInput(String input) {
        this.input = input;
    }
}

并且为了演示,您可以使用您早期的 JSP

<%@taglib uri="customTag" prefix="operator"%>
<%
    String input = "World";//request.getParameter("input");
%>
<operator:multiplier input="<%=input%>"></operator:multiplier>

不要忘记在更新后重新发布您的项目。

于 2013-12-14T19:23:59.347 回答