jsp-tags


JSP custom tag library (Unable to find setter method for the attribute)


I'm having trouble with a custom tag:-
org.apache.jasper.JasperException: /custom_tags.jsp(1,0) Unable to find setter method for attribute : firstname
This is my TagHandler class:
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;
}
}
This is my TLD file:
?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>
And this is my JSP page:
<%# taglib uri="/WEB-INF/nametagdesc.tld" prefix="cg" %>
<cg:name firstname="fname" lastname="lname"/>
I have checked that the code is recompiled and deployed correctly etc etc....
So, the question is , why can't it find the setter method???
Check the case of the attributes in your tag element - they should match the case of the setter, not the case of the member variables (Which should probably be private, by the way).
The rule is that the attribute name has its first letter capitalised and then the result is prefixed by 'set', to arrive at the setter name.
In your case, you've called the attribute 'firstname', so the rule results in the the JSP compiler looking for the 'setFirstname' method. As you've named your setter 'setFirstName' (with a capital 'N'), you should use 'firstName' (Also with a capital 'N') for the attribute name.
Apply the same rule to the 'lastname' attribute, to arrive at 'lastName', and you should be in business.
P.S. Using a good IDE, like IntelliJ, would have helped in this case, as it would have suggested the valid names for your attributes, saving you a lot of head scratching.
The TLD file in your example looks like nonsense, I don't know if it's because you've not formatted it correctly.
The tag element for your custom tag should have an attribute element that corresponds to each attribute you want to expose. Something like:
<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>
Note that by default attributes are Strings. This can be overridden by adding a type element within the attribute element.

Related Links

How page directive “extend” in jsp works?
Simple property not found?
Reusing JSP custom tags inside html
JSP Quiz process is not giving me the correct percentage scored
Refer the id variable of logic - iterate using jstl-el
Invalid tagdir attribute while web-fragment is used
JSP foreach tag for two variables
Adding Parameter to href tag before uri
Servlet exception stream closed jsp
creating and exporting a csv from Display tag table
bean write to number type id
restrict image file size in alloy UI
The function getContextPath must be used with a prefix when a default namespace is not specified
how can i retrive parameters from EncodeURL using jsp?
onclick tag giving error in h:commandLink
Displaytag - How to pass hidden value in url?

Categories

HOME
variables
mediawiki
single-sign-on
tinymce
webstorm
sqlite-net-extensions
google-oauth
youtube-api-v3
electronics
gps
ip
ckeditor
mvvmcross
datastax-java-driver
cloudkit
vault
here-api
spring-xd
apache-cayenne
fallback
designer
saxon
pc
reactive-cocoa
visual-composer
zapier
scriptcs
tokenize
chromium-embedded
mmap
wijmo
react-css-modules
publish
replaceall
opentype
log4js-node
instant-messaging
catalog
jmonkeyengine
qwerty
x11-forwarding
uft-api
ruby-on-rails-3.1
grid.mvc
node-sass
thin
dds
lowpass-filter
slickedit
lift-json
abcpdf9
azure-sdk
login-control
autorest
pagerank
goose
energy
kendonumerictextbox
marching-cubes
qdialog
coveralls
browser-bugs
emailrelay
sysinternals
system32
skos
c++03
google-reader
eol
uitouch
dealloc
didselectrowatindexpath
intentservice
floating-point-precision
geos
aqtime
file-locking
xamlparseexception
sqlperformance
orchardcms-1.7
datawindow
nsdatecomponents
coredump
joyent
hamachi
recent-documents
coda-slider
suppress
icanhaz.js
nhibernate.search
rescale
libs
geneva-server
uiq3

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App