كيفية حل هذه المشكلة مع ملحق علامة JSP؟

StackOverflow https://stackoverflow.com/questions/875715

  •  22-08-2019
  •  | 
  •  

سؤال

بدءًا من تطوير JSP وservlet، أواجه بعض المشكلات المتعلقة بالعلامة المخصصة غير المجسمة التي سيتم إدراجها في صفحة JSP.

الخطوات التي تم القيام بها:

  1. تم كتابة وتجميع CustomTag.java بنجاح (extending TagSupport) في WEB-INF/classes الدليل؛
  2. تم تعريف ملف TLD بمثال بسيط للغاية، بما في ذلك <body-content> مع ال empty قيمة علامة بلا جسد؛
  3. استخدم العلامة في صفحة JSP مع توجيه taglib الذي يشير إلى ملفي /WEB-INF/tlds/site.tld ملف.

مع أخذ كل هذا في الاعتبار، هل لديك أدنى فكرة عن سبب قيام Tomcat بإرسال خطأ كهذا:

لا يمكن حل CustomTag لنوع ما

نشكرك مقدمًا على إجاباتك، ويرجى السؤال عما إذا كنت بحاجة إلى مزيد من التفاصيل.


إليك ملف TLD الخاص بي:

<?xml version="1.0" encoding="ISO-8859-1"?>

< ! DOCTYPE taglib 
    PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" 
    "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>customlib</short-name>
    <description>Custom library.</description>
    <tag>
      <name>header</name>
      <tag-class>HeaderTag</tag-class>
      <body-content>empty</body-content>
      <description>...</description>
    </tag>
</taglib>

ملف جي اس بي:

<%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*" errorPage="" %>
<%@ taglib uri="/WEB-INF/tlds/customlib.tld" prefix="clib" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org    /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>title</title>
</head>

<body>
    <clib:header />
</body>
</html>

فئة علامة الرأس:

import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;
import java.io.IOException;

public class HeaderTag extends TagSupport {

    public int doEndTag() throws JspTagException {
        try {
            pageContext.getOut().print("<p>header</p>");
        }
        catch (IOException e) {
            throw new JspTagException("Error.");
        }
        return EVAL_PAGE;
    }
}
هل كانت مفيدة؟

المحلول

لقد قمت بإعادة البناء وإعادة الانتشار، أليس كذلك؟في هذه الحالة، أفضل تخميني هو أنك تركت توجيه <tag-class> في ملف TLD.

<tag>
    <name>cookieIterator</name>
    <tag-class>util.infoTemplates.CookieIterator</tag-class>
    <body-content>JSP</body-content>
</tag>

إذا لم يكن هذا هو السبب، فيرجى نشر ملف TLD الخاص بك ومثال JSP.


يحرر:يجب أن تحتوي جميع فئات العلامات على حزمة.وفقًا لمواصفات JSP 2.0 (القسم JSP 11.2):

اعتبارًا من الإصدار JSP 2.0، أصبح من غير القانوني الإشارة إلى أي فئات من الفئة غير المسماة (المعروفة أيضًا باسم .الافتراضي) الحزمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top