当前位置: 首页 > 知识库问答 >
问题:

Java自定义标记不起作用/用法有问题

东方弘壮
2023-03-14

我对JSP中的自定义标记有很大的问题。我在WEB-INF/TLD中创建了一个名为“decoration”的标记库描述符文件。我将前缀设置为“d”。然后,我创建了名为“decorateHandler”的标记处理程序类。

我想用简单的方式装饰JSP标题页中的文本,但我得到了一个错误。。。

我的装饰。tld文件

<tlib-version>1.0</tlib-version>
  <short-name>l</short-name>
  <uri>/WEB-INF/tlds/decorate</uri>
  <tag>
    <name>decorate</name>
    <tag-class>decorateHandler</tag-class>
    <body-content>JSP</body-content> 
    <attribute>
        <name>value</name>
    </attribute>
  </tag>
</taglib>

在装饰andler.java我试着这样做:

private String value;

    private void writeTagBodyContent(JspWriter out, BodyContent bodyContent) throws IOException {

        out.println("<font color='"+value+"'>");
        bodyContent.writeOut(out);
        out.println("</font>");

        bodyContent.clearBody();
    }

当然,我已经为字符串值变量创建了getter和setter。

在index.jsp中,我包含了这样的taglib:

<%@taglib uri="/WEB-INF/tlds/decorate.tld" prefix="d" %>

我尝试了这样的方法:

 <d:decorate value="red">Lorem ipsum</d:decorate>

但是我有一个例外:

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: [112] in the jsp file: [/index.jsp]
decorateHandler cannot be resolved to a type
109:                         <li class="nav-item">
110:                             <a class="nav-link" href="index.jsp">
111:                                 <img src="logo.png" height="20px" width="20px">
112:                                 <d:decorate value="red">Lorem ipsum</d:decorate>
113:                             </a>
114:                         </li>
115:                     </ul>      


An error occurred at line: [112] in the jsp file: [/index.jsp]
decorateHandler cannot be resolved to a type
109:                         <li class="nav-item">
110:                             <a class="nav-link" href="index.jsp">
111:                                 <img src="logo.png" height="20px" width="20px">
112:                                 <d:decorate value="red">Lorem ipsum</d:decorate>
113:                             </a>
114:                         </li>
115:                     </ul>      


An error occurred at line: [112] in the jsp file: [/index.jsp]
The method get(Class<? extends Tag>) in the type TagHandlerPool is not applicable for the arguments (Class<decorateHandler>)
109:                         <li class="nav-item">
110:                             <a class="nav-link" href="index.jsp">
111:                                 <img src="logo.png" height="20px" width="20px">
112:                                 <d:decorate value="red">Lorem ipsum</d:decorate>
113:                             </a>
114:                         </li>
115:                     </ul>      


An error occurred at line: [112] in the jsp file: [/index.jsp]
decorateHandler cannot be resolved to a type
109:                         <li class="nav-item">
110:                             <a class="nav-link" href="index.jsp">
111:                                 <img src="logo.png" height="20px" width="20px">
112:                                 <d:decorate value="red">Lorem ipsum</d:decorate>
113:                             </a>
114:                         </li>
115:                     </ul>      


Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:212)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:549)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:350)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:595)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:399)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    Filtr2.doFilter(Filtr2.java:67)

我不知道是什么问题…:/

共有1个答案

吉玉宸
2023-03-14

首先,我认为您应该检查web容器的日志(例如Tomcat、Glassfish?)。该错误的stacktrace将在那里可用,并提示您实际原因是什么。总之,乍一看,很明显错误是由自定义装饰程序taglib引起的,它似乎执行了一个bodyContent。clearBody()在末尾。我认为这在这里是不允许的,也许你是想做一个bodyContent。而是刷新()?

这里有一个关于如何创建自定义jsp标记的教程。

 类似资料:
  • 问题内容: 我在标准类中校准函数时遇到问题。必须具有所有导入才能使用该功能。我需要延长班级吗? 感谢您的即时帮助。 问题答案: 是Context的方法。因此,您可以将上下文传递给DbAdapter构造函数并从中调用:

  • 问题内容: 我正在尝试使用以下图像创建自定义光标: 图像尺寸必须保留。我尝试过使用,尽管在FF / Chrome中不起作用。(甚至不检查其他浏览器) 它不起作用的原因是什么? 问题答案: 问题不仅仅在于您的css代码缺少第二个参数,还在于图像文件。 如果您只是简单地调整大小,请使其变小(我出于测试目的尝试使用32px),它的工作原理就像是一种魅力。 从图像的外观来看,您可能还需要“指针”而不是自动

  • 问题内容: 我正在尝试创建一种类似于英语的小型语言来指定任务。基本思想是将陈述分为动词和名词短语,这些动词应适用于它们。我正在使用nltk,但未获得我希望的结果,例如: 在每种情况下,它都未能意识到第一个单词(选择,移动和复制)被用作动词。我知道我可以创建自定义标签和语法来解决此问题,但是与此同时,当很多此类东西不在我的支持范围内时,我犹豫要重新发明轮子。我特别希望可以同时处理非英语语言的解决方案

  • 因此,我想访问子标记result1、result2、result3中父标记属性test1、test2、test3(这些属性的返回值为true/false)的结果,以根据返回的条件值显示输出,不管它是true还是false。 谢谢,开发者。

  • 字体始终显示默认字体。 我的字体存储在资源/字体中。我尝试使用其他字体,并对字体进行重新编码。此外,PixlUI库并没有解决这个问题。 主要活动。Java语言 activity\u main。xml

  • 问题内容: 我已经创建了一个UserType(请参见下文)来处理mySQL数据库中的一种情况,在该情况下我们将空日期保存为0000-00-00 00:00:00。 当我尝试使用dispDT的null持久化我的实体时(请参见下文),它将生成以下异常:“ javax.persistence.PersistenceException:org.hibernate.PropertyValueExceptio