I would use a factory to create the proxies. This would occur inside of the Struts 
action. Then, in the JSP, you could access the collections as you normally would.

--Kevin

-----Original Message-----
From: Kris Schneider [mailto:kris@;dotech.com]
Sent: Wednesday, October 30, 2002 4:57 PM
To: Struts Users Mailing List
Subject: RE: [OT] Getting a Collection's size in JSTL


But applying a proxy to this scenario seems like overkill. Wouldn't you have to 
do something like the following:

public interface CollectionInfo {
  public int getSize();
}

public class CollectionHandler implements InvocationHandler {

  private Collection c;

  public CollectionHandler(Collection c) {
    this.c = c;
  }

  public Object invoke(Object proxy,
                       Method method,
                       Object[] args) throws Throwable {
    if ("getSize".equals(method.getName())) {
      return new Integer(this.c.size());
    } else {
      return method.invoke(this.c, args);
    }
  }
}

InvocationHandler handler = new CollectionHandler(theCollection);
Object proxy = Proxy.newProxyInstance(classLoader,
                                      new Class[] { Collection.class,
                                                    CollectionInfo.class },
                                      handler);
request.setAttribute("collectionProxy", proxy);

Which may not be horrible if you're using a servlet or Action, but how would 
you use it in a JSP-only situation?

Quoting "Kevin A. Smith" <[EMAIL PROTECTED]>:

> I'm referring to the java.lang.reflect.InvocationHandler. You can use it
> create proxy objects for interfaces "on-the-fly". I've used it extensively as
> a way of adapting mismatched interfaces between objects.
> 
> --Kevin
> 
> -----Original Message-----
> From: David Graham [mailto:dgraham1980@;hotmail.com]
> Sent: Wednesday, October 30, 2002 4:35 PM
> To: [EMAIL PROTECTED]
> Subject: RE: [OT] Getting a Collection's size in JSTL
> 
> 
> What is a DynamicProxy?  We may be talking about the same pattern with 
> different names.
> 
> David
> 
> 
> 
> 
> 
> 
> >From: "Kevin A. Smith" <[EMAIL PROTECTED]>
> >Reply-To: "Struts Users Mailing List" <[EMAIL PROTECTED]>
> >To: "Struts Users Mailing List" <[EMAIL PROTECTED]>
> >Subject: RE: [OT] Getting a Collection's size in JSTL
> >Date: Wed, 30 Oct 2002 16:31:03 -0500
> >
> >This also seems like a good place to use a DynamicProxy. Since most all of
> 
> >the Java Collections package is interfaced base, this seems like it might 
> >be an elegant solution.
> >
> >--Kevin
> >
> >-----Original Message-----
> >From: David Graham [mailto:dgraham1980@;hotmail.com]
> >Sent: Wednesday, October 30, 2002 3:44 PM
> >To: [EMAIL PROTECTED]
> >Subject: Re: [OT] Getting a Collection's size in JSTL
> >
> >
> >That's pretty much what I did except you can only set the internal
> >collection in the constructor.  It's an elegant solution that should
> >probably (in some form) be included in a larger library.
> >
> >David
> >
> >
> >
> >
> >
> >
> > >From: Kris Schneider <[EMAIL PROTECTED]>
> > >Reply-To: "Struts Users Mailing List" <[EMAIL PROTECTED]>
> > >To: Struts Users Mailing List <[EMAIL PROTECTED]>
> > >Subject: Re: [OT] Getting a Collection's size in JSTL
> > >Date: Wed, 30 Oct 2002 15:30:13 -0500
> > >
> > >It should also be relatively painless to use a composition/delegation
> > >approach.
> > >
> > >public class CollectionBean {
> > >
> > >   private Collection c;
> > >
> > >   public int getSize() {
> > >     return this.c.size();
> > >   }
> > >
> > >   public void setCollection(Collection c) {
> > >     this.c = c;
> > >   }
> > >
> > >   public Collection getCollection() {
> > >     return this.c;
> > >   }
> > >}
> > >
> > ><jsp:useBean id="collBean" class="com.foo.CollectionBean"/>
> > ><c:set target="${collBean}"
> > >        property="collection"
> > >        value="${requestScope.theCollection}"/>
> > ><c:out value="${collBean.size}"/>
> > >
> > >Or something along those lines. Of course, you could completely set up 
> >the
> > >collection bean prior to hitting the JSP as well.
> > >
> > >Quoting David Graham <[EMAIL PROTECTED]>:
> > >
> > > > I actually thought of a better idea which is getting into commons
> > > > collections territory but I'll post a quick description here.  I made
> 
> >a
> > > > JstlCollectionWrapper class that wraps any Collection object and
> > >implements
> > > >
> > > > the Collection interface.  I added a getSize() method to this class.
> > >The
> > > > business layer classes can return standard Java collections like
> > >ArrayList
> > > > and you can wrap them in this class when using them in JSTL.
> > > >
> > > > A similar approach could be taken with the Map interface.  I wish
> they
> > >would
> > > >
> > > > just add getSize to the standard classes :-(.
> > > >
> > > > David
> > >
> > >--
> > >Kris Schneider <mailto:kris@;dotech.com>
> > >D.O.Tech       <http://www.dotech.com/>
> > >
> > >--
> > >To unsubscribe, e-mail:
> > ><mailto:struts-user-unsubscribe@;jakarta.apache.org>
> > >For additional commands, e-mail:
> > ><mailto:struts-user-help@;jakarta.apache.org>
> >
> >
> >_________________________________________________________________
> >Protect your PC - get McAfee.com VirusScan Online
> >http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963
> >
> >
> >--
> >To unsubscribe, e-mail:   
> ><mailto:struts-user-unsubscribe@;jakarta.apache.org>
> >For additional commands, e-mail: 
> ><mailto:struts-user-help@;jakarta.apache.org>
> >
> >
> >--
> >To unsubscribe, e-mail:   
> ><mailto:struts-user-unsubscribe@;jakarta.apache.org>
> >For additional commands, e-mail: 
> ><mailto:struts-user-help@;jakarta.apache.org>
> 
> 
> _________________________________________________________________
> Unlimited Internet access for only $21.95/month.  Try MSN! 
> http://resourcecenter.msn.com/access/plans/2monthsfree.asp
> 
> 
> --
> To unsubscribe, e-mail:  
> <mailto:struts-user-unsubscribe@;jakarta.apache.org>
> For additional commands, e-mail:
> <mailto:struts-user-help@;jakarta.apache.org>
> 
> 
> --
> To unsubscribe, e-mail:  
> <mailto:struts-user-unsubscribe@;jakarta.apache.org>
> For additional commands, e-mail:
> <mailto:struts-user-help@;jakarta.apache.org>
> 
> 


-- 
Kris Schneider <mailto:kris@;dotech.com>
D.O.Tech       <http://www.dotech.com/>

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


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

Reply via email to