tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tim Moore" <tmo...@blackboard.com>
Subject RE: Custom Tag / JavaBean question
Date Tue, 15 Oct 2002 17:57:08 GMT
The problem lies in the fact that you've overloaded the setter method
for accessList.  According to the JavaBeans spec, you can't do that;
only one setter per property name is supported.  So, first of all,
you'll need to give the attributes two different names and make them
both optional.

For example:

public void setAccessList(Collection accessList) {
  this.accessList = accessList;
}

public void setAccessListName(String accessListName) {...}

But what's more, because of the way tag pooling works, you probably
don't want to resolve the name in the setter method as you do below (see
http://jakarta.apache.org/taglibs/guidelines.html) so you should have an
accessListName field too, and write setAccessListName just like:

public void setAccessListName(String accessListName) {
  this.accessListName = accessListName;
}

then, in doStartTag:

Collection accessList = this.accessList;
if (accessList == null) {
  accessList = (Collection) pageContext.findAttribute(accessListName);
}

Kind of a pain, but that's the only way to be fully compliant with the
spec.
-- 
Tim Moore / Blackboard Inc. / Software Engineer
1899 L Street, NW / 5th Floor / Washington, DC 20036
Phone 202-463-4860 ext. 258 / Fax 202-463-4863


> -----Original Message-----
> From: Cindy Ballreich [mailto:cindy@ballreich.net] 
> Sent: Tuesday, October 15, 2002 1:13 PM
> To: tomcat-user@jakarta.apache.org
> Subject: Custom Tag / JavaBean question
> 
> 
> 
> I have a custom tag that takes a collection as one of it's 
> parameters. I'd like to be able to give the name of an 
> attribute (a String) as the value and have the tag find the 
> attribute from the pageContext. This doesn't seem like it 
> should be too difficult. I have setters that look like this 
> in my tag...
> 
>   protected Collection accessList;
> 
>   public void setAccessList(String accessList) {
>     Object o = pageContext.findAttribute(accessList);
>     if (o instanceof Collection) {
>       this.accessList = (Collection)o;
>     }
>   }
> 
>   public void setAccessList(Collection accessList) {
>     this.accessList = accessList;
>   }
> 
> ...and the tag looks like this on the jsp page...
> 
>   <jsp:useBean id="accessList" scope="request" 
> class="java.util.Vector" />
>   <mpi:accessList id="access" accessList="accessList" ... >
>      ...
>   </mpi:accessList>
> 
> ... but I keep getting errors like this...
> 
> org.apache.jasper.JasperException: Unable to convert string 
> 'accessList' to class java.util.Collection for attribute 
> accessList: java.lang.IllegalArgumentException: Property 
> Editor not registered with the PropertyEditorManager
> 	at 
> org.apache.jasper.runtime.JspRuntimeLibrary.getValueFromProper
> tyEditorManager(JspRuntimeLibrary.java:749)
> 
> If I use a run time value in the tag I don't get the error...
> 
>   <jsp:useBean id="accessList" scope="request" 
> class="java.util.Vector" />
>   <mpi:accessList id="access" accessList='<%= accessList %> ... >
>      ...
>   </mpi:accessList>
> 
> So I have a workaround for the problem, but I'd still like to 
> understand why the first example doesn't work when everything 
> I've read says that it should.
> 
> I'm using Tomcat 4.1.12 on NT 4.0 (development server) with 
> j2sdk1.4.0_01.
> 
> Thanks
> 
> Cindy
> 
> 
> 
> --
> To unsubscribe, e-mail:   
> <mailto:tomcat-user-> unsubscribe@jakarta.apache.org>
> For 
> additional commands, 
> e-mail: <mailto:tomcat-user-help@jakarta.apache.org>
> 
> 

--
To unsubscribe, e-mail:   <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-user-help@jakarta.apache.org>


Mime
View raw message