JSP bibliothèque de balises personnalisées (Impossible de trouver la méthode de définition de l'attribut)
J'ai de la difficulté avec une étiquette personnalisée:-
org.apache.jasper.JasperException: /custom_tags.jsp(1,0) Impossible de trouver la méthode de définition de l'attribut : prénom
C'est mon TagHandler classe:
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;
}
}
C'est mon TLD fichier:
?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 c'est 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....
Donc la question est , pourquoi ne peut-il pas trouver la méthode setter???
Le code sera plus lisible si vous avez utilisé le "Code Échantillon" les tags
OriginalL'auteur Vinayak Bevinakatti | 2008-10-22
Vous devez vous connecter pour publier un commentaire.
Vérifier le cas des attributs dans la balise de l'élément qu'ils doivent correspondre au cas de l'incubateur, pas le cas des variables de membre (Qui doit probablement être privé, par la voie).
La règle est que le nom de l'attribut de sa première lettre est en majuscule et le résultat est préfixé par "set", pour arriver à la setter nom.
Dans votre cas, vous avez appelé l'attribut
'firstname'
, de sorte que les résultats de la règle dans la JSP compilateur à la recherche du "setFirstname" la méthode. Comme vous l'avez nommé votre setter'setFirstName'
(avec un grand "N"), vous devriez utiliser'firstName'
(Également avec un grand "N") pour le nom de l'attribut.Appliquer la même règle à l'
'lastname'
attribut, pour arriver à'lastName'
, et vous devriez être en affaires.P. S. à l'Aide d'un bon IDE, comme
IntelliJ
, aurait aidé dans ce cas, il aurait suggéré les noms valides pour vos attributs, vous permet d'économiser beaucoup de casse-tête.Votre réponse corrigé mon problème...
pense que j'ai été un peu lent, la mise à jour de ma réponse à votre dernière question. stackoverflow.com/questions/224637/...
Dans mon cas, c'était parce que j'appelle une variable comme
aVarname
, et que seule lettre minuscule suivie par une majuscule on a cassé des choses.OriginalL'auteur belugabob
Le TLD de fichier dans votre exemple, ressemble bêtises, je ne sais pas si c'est parce que vous n'avez pas formaté correctement.
La tag élément de votre étiquette personnalisée devrait avoir un attribut élément qui correspond à chaque attribut que vous souhaitez exposer. Quelque chose comme:
Notez que par défaut, les attributs sont des Chaînes de caractères. Cela peut être modifié par l'ajout d'un type élément à l'intérieur de la attribut élément.
OriginalL'auteur John Topley