Return-Path: Delivered-To: apmail-myfaces-users-archive@www.apache.org Received: (qmail 2169 invoked from network); 19 Jul 2007 11:11:51 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 19 Jul 2007 11:11:51 -0000 Received: (qmail 92933 invoked by uid 500); 19 Jul 2007 11:11:23 -0000 Delivered-To: apmail-myfaces-users-archive@myfaces.apache.org Received: (qmail 92895 invoked by uid 500); 19 Jul 2007 11:11:23 -0000 Mailing-List: contact users-help@myfaces.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "MyFaces Discussion" Delivered-To: mailing list users@myfaces.apache.org Received: (qmail 92880 invoked by uid 99); 19 Jul 2007 11:11:23 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 19 Jul 2007 04:11:23 -0700 X-ASF-Spam-Status: No, hits=2.0 required=10.0 tests=HTML_MESSAGE X-Spam-Check-By: apache.org Received-SPF: pass (herse.apache.org: local policy) Received: from [192.234.253.30] (HELO nemours.org) (192.234.253.30) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 19 Jul 2007 04:11:19 -0700 Received: from nemapp38.nemours.org ([172.19.10.55]) by nemours.org with Microsoft SMTPSVC(5.0.2195.6713); Thu, 19 Jul 2007 07:12:21 -0400 Received: from 10.20.11.90 by nemapp38.nemours.org with ESMTP (SMTP Relay); Thu, 19 Jul 2007 07:13:18 -0400 X-Server-Uuid: 35EBC2B0-EA10-409F-9923-04DFACBAF8D2 Received: from jaxmsx02.nemours.org ([10.20.9.25]) by nemmsx01.nemours.org with Microsoft SMTPSVC(5.0.2195.6713); Thu, 19 Jul 2007 07:10:48 -0400 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Subject: RE: [Trinidad] Renderer Listeners Date: Thu, 19 Jul 2007 07:10:47 -0400 Message-ID: <5B930A45C354E84395A194D500589ED8601DE5@jaxmsx02.nemours.org> In-Reply-To: <071820072132.3268.469E86F0000C52C800000CC422073000330A9D9B0E03020E9009@comcast.net> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [Trinidad] Renderer Listeners Thread-Index: AcfJg0dPTiBmdztMRjapw0mskqUDBwAca/IQ From: "William Hoover" To: "MyFaces Discussion" X-OriginalArrivalTime: 19 Jul 2007 11:10:48.0008 (UTC) FILETIME=[7592E480:01C7C9F5] X-WSS-ID: 6A8198C42JS773748-01-01 Content-Type: multipart/alternative; boundary="----_=_NextPart_001_01C7C9F5.75791FD2" X-Brightmail-Tracker: AAAAAQAAA+k= X-Language-Identified: TRUE X-Virus-Checked: Checked by ClamAV on apache.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C7C9F5.75791FD2 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable This sounds great! I think usage could extend well beyond debugging as = well! =20 -----Original Message----- From: Gary VanMatre [mailto:gvanmatre@comcast.net] Sent: Wednesday, July 18, 2007 5:33 PM To: MyFaces Discussion Subject: Re: [Trinidad] Renderer Listeners >From: "Adam Winer" =20 > > I'd like to see this as a javax.faces.component.UIComponent=20 > feature, not anything specific to one library.=20 > =20 =20 +1 That would be the place for it (JSF 2.0) =20 =20 > -- Adam=20 >=20 >=20 > On 7/18/07, Gary VanMatre wrote:=20 > >=20 > > >From: "Simon Lessard"=20 > > >Yes, that would be awesome. I actually made a wrapper component = doing just=20 > > that in a project. >JSF 1.2 also allows that on which is better=20 > > than nothing, but support on most component >would be more useful = and=20 > > interesting to trap evil components not acting like expected.=20 > >=20 > >=20 > >=20 > > We tried something similar for the shale's "commons" validator. This = was an=20 > > attempt to add the ability for a validator to participate in = rendering for=20 > > client-side support. We hooked into the render kit [1] and wrappered = > > renderers of the command [2] and input [3] families.=20 > >=20 > > At first this seemed like a great trick but later inte rfered with = tomahawks=20 > > PPR. The PPR of tomahawk uses an interface implemented by the = renderer that=20 > > we were hiding. I suppose this would be OK if it was tuned = specifically to=20 > > a component library.=20 > >=20 > >=20 > > [1]=20 > >=20 > = http://svn.apache.org/viewvc/shale/framework/trunk/shale-validator/src/ma= in/java=20 > = /org/apache/shale/validator/faces/ValidatorRenderKit.java?view=3Dmarkup=20 > > [2]=20 > >=20 > = http://svn.apache.org/viewvc/shale/framework/trunk/shale-validator/src/ma= in/java=20 > = /org/apache/shale/validator/faces/ValidatorRenderKit.java?view=3Dmarkup=20 > > [3]=20 > >=20 > = http://svn.apache.org/viewvc/shale/framework/trunk/shale-validator/src/ma= in/java=20 > = /org/apache/shale/validator/faces/ValidatorInputRenderer.java?view=3Dmark= up=20 > >=20 > >=20 > > Gary=20 > >=20 > >=20 > > On 7/18/07, Adam Winer w rote:=20 > > > BTW, one thing I thought of recently is that it could be really=20 > > > handy for JSF debugging to support attaching component-level=20 > > > phase listeners (render, and other phases), so you could=20 > > > set a breakpoint at, for instance, "Before my table renders".=20 > > > Or "After this input field validates". That'd be a generalization=20 > > > of a render listener. The trick would be doing this in a way=20 > > > that doesn't drag down performance overall, which might be a lot=20 > > > easier if the overall UIComponent API were overhauled...=20 > > >=20 > > >=20 > > > -- Adam=20 > > >=20 > > >=20 > > >=20 > > >=20 > > >=20 > > > On 7/17/07, William Hoover wrote:=20 > > > >=20 > > > >=20 > > > > The problem with the tableSelecti on is that I can't ensure that = the page=20 > > will always be using a table component for the list, but I think I = might=20 > > have a solution. Thanks for the help though!=20 > > > >=20 > > > > Concerning the render listeners... I can understand your = concern. I was=20 > > thinking that another solution (correct me if I'm wrong) might be = using the=20 > > "RenderStage" to track this. When a new stage is set any listeners = that are=20 > > registered will be notified by a render event... Just a thought :o)=20 > > > >=20 > > > > -----Original Message-----=20 > > > > From: Adam Winer [mailto:awiner@gmail.com]=20 > > > >=20 > > > > Sent: Monday, July 16, 2007 7:24 PM=20 > > > > To: MyFaces Discussion=20 > > > > Subject: Re: [Trinidad] Renderer Listeners=20 > > > >=20 > > > >=20 > > > > On 7/16/07, Will iam Ho over wrote:=20 > > > >=20 > > > > > The intent is to track selections. It seems like a lot of = extra work=20 > > to maintain quite a few tr:inputHidden components just to capture = selection=20 > > values. I see what your saying about post-processing a pattern in = JS, but I=20 > > don't think that searching through table for fields might be the = best=20 > > solution :)=20 > > > >=20 > > > >=20 > > > > For selection the Trinidad table has a built-in selection = mechanism -=20 > > tableSelection=3D"single|multiple". Might not be the UI you=20 > > love best, but it works.=20 > > > >=20 > > > >=20 > > > > > It seems like a cleaner and less error prone solution would be = a=20 > > renderer listener that can be invoked in either the encodeBegin() or = > > encodeEnd() methods in the base component. That way a custo m = component isn't=20 > > necessary. All I would have to do is set the renderer listener on = the link=20 > > component to process after the link has been rendered, capture the=20 > > UIParameter values (they will not be null at this stage as they were = before=20 > > the link was rendered), and use them in a JS call to populate the = selection=20 > > input (as described below). I think this approach would minimize the = amount=20 > > of work it takes to implement a custom component, and I'm sure that = code=20 > > execution would be more efficient than adding a new component to the = mix=20 > > everytime that a developer needs some code to execute before/after a = > > component renders. I can see quite a few scenarios where it might be = h=20 > > elpful to fire some code before/after any component has been = rendered- don't=20 > > you?=20 > > > >=20 > > > >=20 > > > > Actually , I wa s imagining one custom component that exposes a = generic=20 > > "before/after rendering" listener API.=20 > > > >=20 > > > > My concern about adding this to all components is that adding = overhead=20 > > to every component's rendering + state saving performance when only = a small=20 > > minority actually use the functionality is very worrisome. I've very = rarely=20 > > encountered the need for what you're going for.=20 > > > >=20 > > > > -- Adam=20 > > > >=20 > > > >=20 > > > >=20 > > > > > -----Original Message-----=20 > > > > > From: Adam Winer [mailto: awiner@gmail.com]=20 > > > > > Sent: Saturday, July 14, 2007 12:30 PM=20 > > > > > To: MyFaces Discussion=20 > > > > > Subject: Re: [Trinidad] Renderer Listeners=20 > > > > >=20 > > > > >=20 > > > > > On 7/13/07, William Hoover wrote:=20 > > > > > > As you guessed it, there are links within each table row = that=20 > > contain a f:param that holds data for that row. When the user clicks = on that=20 > > row I need to update a separate input field (outside the table- = inside the=20 > > same form) with the value from the f:param. I need this to happen on = the=20 > > client side before the page submits.=20 > > > > > >=20 > > > > >=20 > > > > > That, I don't get. Is the in tent t o track selection in some = way?=20 > > > > > Couldn't you just stick a tr:inputHidden in the row and grab = that=20 > > > > > value on the client, copying it into that separate input = field? Or,=20 > > > > > for example, running some post-processing in JS (search for = fields in=20 > > > > > the table that match a pattern). Etc., there's gotta be a = better way=20 > > > > > of handling this.=20 > > > > >=20 > > > > > Alternatively, you could write a simple component of your own = that=20 > > > > > doesn't render anything, but gets inserted into the table; you = > > > > > implement its encodeBegin() to=20 > > > > > do your stuff.=20 > > > > >=20 > > > > > -- Adam=20 > > > > >=20 > > > > >=20 > > > > > > I know that I can make this happen using EL in the link's = onclick=20 > > attribute based upon the current row data and the separate input = field id (=20 > > i.e. onclick=3D"javascript:=20 > > setInputValue('separateInputFieldId',#{row.someValue}';"),=20 > > but I have a table view that gets reused quite a bit that may or may = not=20 > > need this feature based upon individual needs. Also, I'm not su re = tha t it's=20 > > a good idea t o capture the client id for the separate input field = in this=20 > > manner due to the client id dependency on naming containers. That's = why I'm=20 > > looking for a programmatic solution that will add the needed = javascript call=20 > > on an as needed basis before the link/param are rendered outside the = jsf=20 > > page.=20 > > > > > >=20 > > > > > > -----Original Message-----=20 > > > > > > From: Adam Winer [mailto:awiner@gmail.com]=20 > > > > > > Sent: Friday, July 13, 2007 3:24 PM=20 > > > > > > To: MyFaces Discussion=20 > > > > > > Subject: Re: [Trinidad] Renderer Listeners=20 > > > > > >=20 > > > > > >=20 > > > > > > Well, that's what you're doing, but doesn't quite explain=20 > > > > > > (A) why the value is null until the link i s rendered = (though=20 > > > > > > I'm guessing that's because its value comes from the=20 > > > > > > table data)=20 > > > > > > (B) why you need to get the param value for this specific=20 > > > > > > command link within this table (or a specific row=20 > > > > > > of the ta ble?)=20 > > > > > >=20 > > > > > > -- Adam=20 > > > > > >=20 > > > > > >=20 > > > > > > On 7/13/07, William Hoover < whoover@nemours.org> wrote:=20 > > > > > > > I am trying to get a f:param value from a CoreCommandLink, = but the=20 > > value is null until the link has been rendered.=20 > > > > > > >=20 > > > > > > > The link is inside a tr:column- if that helps.=20 > > > > > > >=20 > > > > > > > -----O riginal Message-----=20 > > > > > > > From: Adam Winer [mailto:awiner@gmail.com]=20 > > > > > > > Sent: Friday, July 13, 2007 2:42 PM=20 > > > > > > > To: MyFaces Discussion=20 > > > > > > > Subject: Re: [Trinidad] Renderer Listeners=20 > > > > > > >=20 > > > > > > >=20 > > > > > > > There's no event listener, but there is that = ResponseWriter=20 > > > > > > > API, which will get passed components on startElement().=20 > > > > > > > 99% works (necessari ly, be cause PPR relies on that!).=20 > > > > > > > What functionality are you trying to get here?=20 > > > > > > >=20 > > > > > > > -- Adam=20 > > > > > > >=20 > > > > > > >=20 > > > > > > > On 7/13/07, Willi am Hoover < whoover@nemours.org> wrote:=20 > > > > > > > > I don't suppose there are any event listeners that can = detect=20 > > when components are being rendered? It would be nice if there was a = way to=20 > > be able to...=20 > > > > > > > >=20 > > > > > > > > component.addRendererListener(new RendererListener() {=20 > > > > > > > > public void processRenderBegin(RenderEvent event) {=20 > > > > > > > > ...=20 > > > > > > > > }=20 > > > > > > > > public void processRende rEnd(R enderEvent event) {=20 > > > > > > > > ...=20 > > > > > > > > }=20 > > > > > > > > });=20 > > > > > > > >=20 > > > > > > > >=20 > > > > > > >=20 > > > > > > >=20 > > > > > >=20 > > > > > >=20 > > > > >=20 > > > > >=20 > > > >=20 > > > >=20 > > >=20 > > >=20 > >=20 > >=20 ------_=_NextPart_001_01C7C9F5.75791FD2 Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable
This=20 sounds great! I think usage could extend well beyond debugging as=20 well!
 
-----Original Message-----
From: Gary VanMatre=20 [mailto:gvanmatre@comcast.net]
Sent: Wednesday, July 18, 2007 = 5:33=20 PM
To: MyFaces Discussion
Subject: Re: [Trinidad] = Renderer=20 Listeners

>From: "Adam Winer" <awiner@gmail.com>
>
> = I'd like=20 to see this as a javax.faces.component.UIComponent
> feature, not = anything specific to one library.
>
 
 
+1 That would be the place for it (JSF 2.0)
 
 

> -- Adam
>
>
> On 7/18/07, Gary = VanMatre=20 wrote:
> >
> > >From: = "Simon=20 Lessard"
> > >Yes, that would be = awesome. I actually made a wrapper component doing just
> > = that in a=20 project. >JSF 1.2 also allows that on which is better =
> >=20 than nothing, but support on most component >would be more useful and =
> > interesting to trap evil components not acting like = expected.=20
> >
> >
> >
> > We tried = something=20 similar for the shale's "commons" validator. This was an
> > = attempt=20 to add the ability for a validator to participate in rendering for =
> >=20 client-side support. We hooked into the render kit [1] and wrappered =
>=20 > renderers of the command [2] and input [3] families.
> > =
>=20 > At first this seemed like a great trick but later inte rfered with=20 tomahawks
> > PPR. The PPR of tomahawk uses an interface = implemented=20 by the renderer that
> > we were hiding. I suppose this would = be OK if=20 it was tuned specifically to
> > a component library.
> = >=20
> >
> > [1]
> >
>=20 http://svn.apache.org/viewvc/shale/framework/trunk/shale-validator/src/ma= in/java=20
> = /org/apache/shale/validator/faces/ValidatorRenderKit.java?view=3Dmarkup=20
> > [2]
> >
>=20 http://svn.apache.org/viewvc/shale/framework/trunk/shale-validator/src/ma= in/java=20
> = /org/apache/shale/validator/faces/ValidatorRenderKit.java?view=3Dmarkup=20
> > [3]
> >
>=20 http://svn.apache.org/viewvc/shale/framework/trunk/shale-validator/src/ma= in/java=20
>=20 /org/apache/shale/validator/faces/ValidatorInputRenderer.java?view=3Dmark= up=20
> >
> >
> > Gary
> >
> = >=20
> > On 7/18/07, Adam Winer w rote:
> = >=20 > BTW, one thing I thought of recently is that it could be really =
>=20 > > handy for JSF debugging to support attaching component-level =
>=20 > > phase listeners (render, and other phases), so you could =
> >=20 > set a breakpoint at, for instance, "Before my table renders". =
> >=20 > Or "After this input field validates". That'd be a generalization =
>=20 > > of a render listener. The trick would be doing this in a way =
>=20 > > that doesn't drag down performance overall, which might be a = lot=20
> > > easier if the overall UIComponent API were = overhauled...=20
> > >
> > >
> > > -- Adam =
> >=20 >
> > >
> > >
> > >
> = > >=20
> > > On 7/17/07, William Hoover = wrote:=20
> > > >
> > > >
> > > > = The=20 problem with the tableSelecti on is that I can't ensure that the page =
>=20 > will always be using a table component for the list, but I think I = might=20
> > have a solution. Thanks for the help though!
> > = >=20 >
> > > > Concerning the render listeners... I can = understand=20 your concern. I was
> > thinking that another solution = (correct me if=20 I'm wrong) might be using the
> > "RenderStage" to track this. = When a=20 new stage is set any listeners that are
> > registered will be = notified by a render event... Just a thought :o)
> > > > =
> > > > -----Original Message-----
> > > = > From:=20 Adam Winer [mailto:awiner@gmail.com]
> > > >
> = > >=20 > Sent: Monday, July 16, 2007 7:24 PM
> > > > To: = MyFaces=20 Discussion
> > > > Subject: Re: [Trinidad] Renderer = Listeners=20
> > > >
> > > >
> > > > = On=20 7/16/07, Will iam Ho over wrote:
> > > = >=20
> > > > > The intent is to track selections. It seems = like a=20 lot of extra work
> > to maintain quite a few tr:inputHidden=20 components just to capture selection
> > values. I see what = your=20 saying about post-processing a pattern in JS, but I
> > don't = think=20 that searching through table for fields might be the best
> > = solution=20 :)
> > > >
> > > >
> > > = > For=20 selection the Trinidad table has a built-in selection mechanism - =
> >=20 tableSelection=3D"single|multiple". Might not be the UI you
> = > love=20 best, but it works.
> > > >
> > > > =
>=20 > > > > It seems like a cleaner and less error prone = solution would=20 be a
> > renderer listener that can be invoked in either the=20 encodeBegin() or
> > encodeEnd() methods in the base = component. That=20 way a custo m component isn't
> > necessary. All I would have = to do is=20 set the renderer listener on the link
> > component to process = after=20 the link has been rendered, capture the
> > UIParameter values = (they=20 will not be null at this stage as they were before
> > the = link was=20 rendered), and use them in a JS call to populate the selection
> = >=20 input (as described below). I think this approach would minimize the = amount=20
> > of work it takes to implement a custom component, and I'm = sure=20 that code
> > execution would be more efficient than adding a = new=20 component to the mix
> > everytime that a developer needs some = code to=20 execute before/after a
> > component renders. I can see quite = a few=20 scenarios where it might be h
> > elpful to fire some code=20 before/after any component has been rendered- don't
> > you? =
>=20 > > >
> > > >
> > > > Actually = , I wa s=20 imagining one custom component that exposes a generic
> >=20 "before/after rendering" listener API.
> > > >
> = >=20 > > My concern about adding this to all components is that adding = overhead=20
> > to every component's rendering + state saving performance = when=20 only a small
> > minority actually use the functionality is = very=20 worrisome. I've very rarely
> > encountered the need for what = you're=20 going for.
> > > >
> > > > -- Adam =
> >=20 > >
> > > >
> > > >
> > = >=20 > > -----Original Message-----
> > > > > From: = Adam=20 Winer [mailto: awiner@gmail.com]
> > > > > Sent: = Saturday,=20 July 14, 2007 12:30 PM
> > > > > To: MyFaces = Discussion=20
> > > > > Subject: Re: [Trinidad] Renderer Listeners =
>=20 > > > >
> > > > >
> > > > = > On=20 7/13/07, William Hoover wrote:
> > > = > >=20 > As you guessed it, there are links within each table row that =
> >=20 contain a f:param that holds data for that row. When the user clicks on = that=20
> > row I need to update a separate input field (outside the = table-=20 inside the
> > same form) with the value from the f:param. I = need this=20 to happen on the
> > client side before the page submits. =
>=20 > > > > >
> > > > >
> > > = >=20 > That, I don't get. Is the in tent t o track selection in some way? =
>=20 > > > > Couldn't you just stick a tr:inputHidden in the row = and grab=20 that
> > > > > value on the client, copying it into = that=20 separate input field? Or,
> > > > > for example, = running some=20 post-processing in JS (search for fields in
> > > > > = the=20 table that match a pattern). Etc., there's gotta be a better way =
> >=20 > > > of handling this.
> > > > >
> = > >=20 > > Alternatively, you could write a simple component of your own = that=20
> > > > > doesn't render anything, but gets inserted = into the=20 table; you
> > > > > implement its encodeBegin() to =
>=20 > > > > do your stuff.
> > > > >
> = >=20 > > > -- Adam
> > > > >
> > > = > >=20
> > > > > > I know that I can make this happen = using EL in=20 the link's onclick
> > attribute based upon the current row = data and=20 the separate input field id (
> > i.e. onclick=3D"javascript: =
>=20 > setInputValue('separateInputFieldId',#{row.someValue}';"),
> = >=20 but I have a table view that gets reused quite a bit that may or may not =
> > need this feature based upon individual needs. Also, I'm = not su re=20 tha t it's
> > a good idea t o capture the client id for the = separate=20 input field in this
> > manner due to the client id dependency = on=20 naming containers. That's why I'm
> > looking for a = programmatic=20 solution that will add the needed javascript call
> > on an as = needed=20 basis before the link/param are rendered outside the jsf
> > = page.=20
> > > > > >
> > > > > >=20 -----Original Message-----
> > > > > > From: Adam = Winer=20 [mailto:awiner@gmail.com]
> > > > > > Sent: = Friday, July=20 13, 2007 3:24 PM
> > > > > > To: MyFaces = Discussion=20
> > > > > > Subject: Re: [Trinidad] Renderer = Listeners=20
> > > > > >
> > > > > > =
>=20 > > > > > Well, that's what you're doing, but doesn't = quite=20 explain
> > > > > > (A) why the value is null = until the=20 link i s rendered (though
> > > > > > I'm guessing = that's=20 because its value comes from the
> > > > > > table = data)=20
> > > > > > (B) why you need to get the param = value for=20 this specific
> > > > > > command link within this = table=20 (or a specific row
> > > > > > of the ta ble?) =
>=20 > > > > >
> > > > > > -- Adam =
> >=20 > > > >
> > > > > >
> > > = >=20 > > On 7/13/07, William Hoover < whoover@nemours.org> wrote: =
> > > > > > > I am trying to get a f:param = value from a=20 CoreCommandLink, but the
> > value is null until the link has = been=20 rendered.
> > > > > > >
> > > > = >=20 > > The link is inside a tr:column- if that helps.
> > = > >=20 > > >
> > > > > > > -----O riginal=20 Message-----
> > > > > > > From: Adam Winer=20 [mailto:awiner@gmail.com]
> > > > > > > Sent: = Friday,=20 July 13, 2007 2:42 PM
> > > > > > > To: MyFaces = Discussion
> > > > > > > Subject: Re: = [Trinidad]=20 Renderer Listeners
> > > > > > >
> > = >=20 > > > >
> > > > > > > There's no = event=20 listener, but there is that ResponseWriter
> > > > > = >=20 > API, which will get passed components on startElement().
> = > >=20 > > > > 99% works (necessari ly, be cause PPR relies on = that!).=20
> > > > > > > What functionality are you trying = to get=20 here?
> > > > > > >
> > > > = > >=20 > -- Adam
> > > > > > >
> > > = > >=20 > >
> > > > > > > On 7/13/07, Willi am = Hoover=20 < whoover@nemours.org> wrote:
> > > > > > = > >=20 I don't suppose there are any event listeners that can detect
> = > when=20 components are being rendered? It would be nice if there was a way to =
>=20 > be able to...
> > > > > > > >
> = >=20 > > > > > > component.addRendererListener(new=20 RendererListener() {
> > > > > > > > public = void=20 processRenderBegin(RenderEvent event) {
> > > > > = > >=20 > ...
> > > > > > > > }
> > = > >=20 > > > > public void processRende rEnd(R enderEvent event) { =
>=20 > > > > > > > ...
> > > > > > = >=20 > }
> > > > > > > > });
> > = > >=20 > > > >
> > > > > > > >
> = >=20 > > > > >
> > > > > > >
> = >=20 > > > >
> > > > > >
> > > = >=20 >
> > > > >
> > > >
> > = >=20 >
> > >
> > >
> >
> >=20
------_=_NextPart_001_01C7C9F5.75791FD2--