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

Build URL to query JSP
how can we display value in java server page set in dto
Difference between jsp include action tag and jsp include directive
How to iterate through a list of list in jsp
JSP Custom Tag File and Dynamic attributes
Fetch drop down box multi selector
jsp code to upload jgp files and save in mysql db
when I run my jsp pgogram I got this exception error type Exception report
jstl formatNumber in input leads to NumberFormatException
Youtube onYouTubePlayerReady() function not firing
username and password cannot be resolved or is not a field
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

Categories

HOME
arduino-uno
openlayers
plone
react-virtualized
electron
grep
octobercms
google-oauth
leon
retrofit
ezpublish
enterprise-library-5
wamp
networkx
upload
ssl-client-authentication
row
mapserver
modelica
zebra-printers
designer
iolanguage
lombok
saxon
serilog
aurigma
reactcsstransitiongroup
code-review
dbext
paging
scriptcs
mustache.php
java-7
elasticsearch-ruby
replaceall
jspm
procdump
flink-streaming
titanium-mobile
azure-sql-database
form-data
y86
picasso
fusionpbx
stacked
vxworks
simplexml
libraries
starteam
c11
hilbert-curve
xenforo
jna
splice
lumberjack
trim
eclipse-scout
sfdc
jvm-languages
nomethoderror
nxlog
fakeiteasy
convertapi
outlook-2013
rdfs
mu
tropo
feeds
boost-preprocessor
gcsfuse
vtigercrm
objective-c-swift-bridge
nested-sets
google-feed-api
url-masking
phishing
google-web-starter-kit
autorest
lttng
sigabrt
ubuntu-10.04
hover-over
vhd
reactive-banana
thredds
kcachegrind
tarjans-algorithm
microbenchmark
sankey-diagram
gadt
onactivityresult
sgen
p4java
pyhdf
page-layout
oam
soundtouch
easy-install
chronoforms
seed
clipper
anonymous-methods
isnullorempty
regsvr32
qtkit
gwt-ext
qt-jambi
xmlspy
locationlistener
disclosure
google-friend-connect
h.323
sproutcore-2
jquery-ui-droppable
routedevent
nsviewanimation

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