JSP العلامة المخصصة مكتبة (غير قادر على العثور على طريقة اضع للسمة)

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

  •  03-07-2019
  •  | 
  •  

سؤال

وأواجه مشكلة مع علامة مخصصة: -

وorg.apache.jasper.JasperException: /custom_tags.jsp(1،0) غير قادر على العثور على طريقة اضع للسمة: الاسم الأول

وهذا هو صفي TagHandler:

package com.cg.tags;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class NameTag extends TagSupport{

    public String firstname;
    public String lastname;

    public void setFirstName(String firstname){

        this.firstname=firstname;
        }
    public void setLastName(String lastname){

        this.lastname=lastname;
        }

    public int doStartTag() throws JspException {
        try {
            JspWriter out=pageContext.getOut();
            out.println( "First name:  "+firstname+ "Last name: "+lastname);

        } catch (Exception ex) {
            throw new JspException("IO problems");
        }
        return SKIP_BODY;
    }


}

وهذا هو ملف TLD لي:

?xml version="1.0" encoding="UTF-8"?>
<taglib>
     <tlibversion>1.1</tlibversion>
     <jspversion>1.1</jspversion>
     <shortname>utility</shortname>
     <uri>/WEB-INF/nametagdesc.tld</uri>
     <info>
       A simple tag library for the examples
     </info>
   <tag>
       <name>name</name>
       <tagclass>com.cg.tags.NameTag</tagclass>
       <bodycontent>empty</bodycontent>
      <attribute>
      <name>firstname</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      </attribute>
      <attribute>
      <name>lastname</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
 </tag>
</taglib>

وهذه هي صفحة JSP بلدي:

<%@ taglib uri="/WEB-INF/nametagdesc.tld" prefix="cg"  %>

<cg:name firstname="fname" lastname="lname"/>

ولقد دققت التي معاد رمز والمنتشرة بشكل صحيح الخ الخ ....

وهكذا، والسؤال هو، لماذا لا يمكن أن تجد طريقة اضع ؟؟؟

هل كانت مفيدة؟

المحلول

وتحقق من حالة من سمات في حياتك عنصر علامة - أنها يجب أن تطابق حالة واضع، وليس حالة من المتغيرات عضو (الذي ربما ينبغي أن تكون خاصة، بالمناسبة)

والقاعدة هي أن اسم السمة ديه الأول رسالتها رسملة ومن ثم يتم مسبوقة نتيجة ل 'مجموعة'، للوصول إلى اسم واضعة.

في قضيتك، كنت قد دعا 'firstname' السمة، وبالتالي فإن النتائج القاعدة في المجمع JSP يبحثون عن طريقة "setFirstname. كما كنت قد عينت 'setFirstName' اضع الخاص بك (برأس مال 'N')، يجب عليك استخدام 'firstName' (أيضا برأسمال 'N') لاسم السمة.

وتطبيق نفس القاعدة على السمة 'lastname'، للوصول إلى 'lastName'، ويجب أن تكون في مجال الأعمال التجارية.

وP.S. باستخدام IDE جيدة، مثل IntelliJ، من الممكن أن يساعد في هذه الحالة، لأنه قد اقترح أسماء صالحة للسمات الخاصة بك، مما يوفر لك الكثير من رأس الخدش.

نصائح أخرى

وملف TLD في المثال الخاص بك يبدو وكأنه هراء، أنا لا أعرف ما اذا كان لأنك غير مهيأ بشكل صحيح.

يجب أن يكون <م> العلامة عنصر لهذا الكود المخصص ل<م> السمة العنصر الذي يتوافق مع كل سمة تريد كشف. شيء من هذا القبيل:

<tag>
  <name>...</name>
  <tag-class>...</tag-class>
  <body-content>...</body-content>
  <display-name>...</display-name>
  <description>...</description>

  <attribute>
    <name>firstName</name>
    <required>true</required>
    <rtexprvalue>true</rtexprvalue>
    <description>...</description>
  </attribute>
</tag>

لاحظ أن افتراضيا الصفات هي سلاسل. يمكن تجاوز ذلك عن طريق إضافة <م> نوع عنصر ضمن السمة العنصر.

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