Bibliothèque de balises personnalisées JSP (impossible de trouver la méthode de définition pour l'attribut)

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

  •  03-07-2019
  •  | 
  •  

Question

J'ai des problèmes avec une balise personnalisée: -

org.apache.jasper.JasperException: /custom_tags.jsp(1,0) Impossible de trouver la méthode de définition pour l'attribut: prénom

Voici ma classe 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;
    }


}

Ceci est mon fichier 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>

Et voici ma page JSP:

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

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

J'ai vérifié que le code est recompilé et déployé correctement, etc., etc.

.

La question est donc de savoir pourquoi ne trouve-t-il pas la méthode de définition ???

Était-ce utile?

La solution

Vérifiez la casse des attributs dans votre élément de balise - ils devraient correspondre à la casse du setter, pas à la casse des variables membres (qui devraient probablement être privées, soit dit en passant).

La règle est que le nom de l'attribut a sa première lettre en majuscule, puis le résultat est préfixé par 'set' pour arriver au nom du séparateur.

Dans votre cas, vous avez appelé l'attribut 'prénom' . La règle a donc pour résultat que le compilateur JSP recherche la méthode 'setFirstname'. Comme vous avez nommé votre setter 'setFirstName' (avec un 'N' majuscule), vous devez utiliser 'firstName' (avec également un 'N' majuscule) pour la nom d'attribut.

Appliquez la même règle à l'attribut 'nom de famille' pour arriver à 'nom de famille' , et vous devriez être en affaires.

P.S. Utiliser un bon IDE, comme IntelliJ , aurait été utile dans ce cas, car il aurait suggéré les noms valides pour vos attributs, ce qui vous aurait évité bien des soucis.

Autres conseils

Le fichier TLD de votre exemple ressemble à un non-sens. Je ne sais pas si c'est parce que vous ne l'avez pas correctement formaté.

L'élément balise de votre balise personnalisée doit avoir un élément attribut qui correspond à chaque attribut que vous souhaitez exposer. Quelque chose comme:

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

Notez que par défaut, les attributs sont des chaînes. Cela peut être annulé en ajoutant un élément type dans l'élément attribut .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top