无法在 Java 中为自定义标签加载标签处理程序类

Posted

技术标签:

【中文标题】无法在 Java 中为自定义标签加载标签处理程序类【英文标题】:Unable to load tag handler class for custom tag in Java 【发布时间】:2015-11-27 21:48:03 【问题描述】:

我正在使用 Java 中的自定义标签,但出现错误。让我在下面详细说明所涉及的文件:

我的tag.tld(路径为:\WEB-INF\tlds\tag.tld)有如下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" 
                        "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">


<taglib>
<tlibversion>0.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>message</shortname>

<tag>
<description>StringReverseTag</description>
<name>string</name>
<tag-class>mytag.StringReverseTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>data</name>
<required>true</required>
</attribute>
</tag>
</taglib>

ReverseEx.jsp

<%@page contentType="text/html" pageEncoding="UTF-8" language="java"%>
<!DOCTYPE html>
<%@taglib uri="/WEB-INF/tlds/tag.tld" prefix="jen" %> 
<jen:string data="EARTH"/>

<html>
<head>
<title>Tag Example</title>
</head>
<body>
</body>
</html>

助手类:

package chap4;

import java.io.IOException;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;

public class StringReverseTag extends SimpleTagSupport
    private String data;
    public void setData(String data) 
    this.data=data;
    

    @Override
    public void doTag() throws JspException, IOException
        JspWriter out = getJspContext().getOut();
        StringBuffer sb= new StringBuffer(data);
        sb.reverse();
        out.print(sb);
    

我得到的错误如下:

org.apache.jasper.JasperException:文件: ...Struts/Struts/build/web/ReverseEx.jsp(10,0) PWC6032:无法加载 标记“jen:string”的标记处理程序类“mytag.StringReverseTag” org.apache.jasper.JasperException:PWC6032:无法加载标签 标签“jen:string”的处理程序类“mytag.StringReverseTag” ...Struts/Struts/build/web/ReverseEx.jsp(10,0) ...Struts\Struts\nbproject\build-impl.xml:924:Java 返回:1 BUILD 失败(总时间:2 秒)

我做错了什么?

【问题讨论】:

有什么好的理由创建自定义标签来反转字符串? 用一个简单的例子来了解自定义标签的工作原理,Aleksandr。 请阅读更新的 JSP 2.x 教程,而不是十年前的 JSP 1.x 教程。 【参考方案1】:

在您编写的 tag.tld 文件中:

<tag-class>mytag.StringReverseTag</tag-class>

这意味着:您的课程 StringReverseTag 应该在 myTag 包中。 但在你的StringReverseTag 代码中,我可以看到你有chap4 作为包!

要解决您的问题,只需更改:

<tag-class>mytag.StringReverseTag</tag-class>

<tag-class>chap4.StringReverseTag</tag-class>

【讨论】:

成功了!非常感谢。我想知道 mytag,不知道它是什么意思。

以上是关于无法在 Java 中为自定义标签加载标签处理程序类的主要内容,如果未能解决你的问题,请参考以下文章

jsp自定义标签处理转义字符

为啥我的安卓手机在为自定义滚动视图添加标签栏视图后没有功能

使用 JAVA 在 Windows 中为自定义硬件编写 WMI 提供程序

错误:无法使用自定义单元格类设置 UITableViewCell 标签和图像!只能加载单元格样式的数据:字幕不是自定义的

PSR-4 自动加载如何在 composer 中为自定义库工作?

将文本设置为自定义表格单元格标签时崩溃