Frage

Ich habe Probleme mit einem benutzerdefinierten Tag: -

org.apache.jasper.JasperException: /custom_tags.jsp(1,0) Unable Setter-Methode für das Attribut zu finden: Vorname

Das ist mein Taghandler Klasse:

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;
    }


}

Das ist meine TLD-Datei:

?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>

Und das ist meine JSP-Seite:

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

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

Ich habe überprüft, dass der Code neu kompiliert und korrekt etc etc eingesetzt ....

Also, die Frage ist, warum kann es nicht die Setter-Methode finden ???

War es hilfreich?

Lösung

Überprüfen Sie den Fall der Attribute in Ihrem Tag-Element -. Sie den Fall der Setter übereinstimmen sollte, nicht der Fall der Mitgliedsvariablen (was wahrscheinlich privat sein sollte, übrigens)

Die Regel ist, dass das Attribut Name hat seine erste Buchstaben groß geschrieben und dann wird das Ergebnis mit vorangestelltem ‚Set‘, bei dem Setter Namen zu gelangen.

In Ihrem Fall haben Sie das Attribut 'firstname' genannt, so dass die Regel Ergebnisse in dem JSP-Compiler der Suche nach dem ‚setFirstname‘ -Methode. Wie Sie Ihre Setter 'setFirstName' (mit einem Kapital ‚N‘) genannt haben, sollten Sie 'firstName' (auch mit einem Kapital ‚N‘) für die Attributnamen verwenden.

Tragen Sie die gleiche Regel auf das 'lastname' Attribut, bei 'lastName' ankommen, und Sie sollten im Geschäft.

P. S. eine gute IDE, wie IntelliJ verwenden, haben in diesem Fall geholfen hätte, da es die gültigen Namen für Ihre Attribute vorgeschlagen haben, würden Sie eine Menge Kopfspar kratzen.

Andere Tipps

Die TLD-Datei in Ihrem Beispiel sieht aus wie Unsinn, ich weiß nicht, ob es ist, weil Sie es nicht richtig formatiert haben.

Die Tag -Element für die benutzerdefinierte Tag sollte ein Attribut -Element, das entspricht jeweils Attribut, das Sie machen möchten. So etwas wie:

<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>

Beachten Sie, dass durch Standardattribute Strings sind. Dies kann durch das Hinzufügen einer außer Kraft gesetzt werden Typ -Element innerhalb des Attribut -Element.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top