BTW, one thing I thought of recently is that it could be reallyhandy for JSF
debugging to support attaching component-level
phase listeners (render, and other phases), so you could
set a breakpoint at, for instance, "Before my table renders".
Or "After this input field validates".  That'd be a generalization
of a render listener.  The trick would be doing this in a way
that doesn't drag down performance overall, which might be a lot
easier if the overall UIComponent API were overhauled...

-- Adam


On 7/17/07, William Hoover <[EMAIL PROTECTED]> wrote:

 The problem with the tableSelection is that I can't ensure that the page
will always be using a table component for the list, but I think I might
have a solution. Thanks for the help though!

Concerning the render listeners... I can understand your concern. I was
thinking that another solution (correct me if I'm wrong) might be using the
"RenderStage" to track this. When a new stage is set any listeners that are
registered will be notified by a render event... Just a thought :o)

-----Original Message-----
*From:* Adam Winer [mailto:[EMAIL PROTECTED]
*Sent:* Monday, July 16, 2007 7:24 PM
*To:* MyFaces Discussion
*Subject:* Re: [Trinidad] Renderer Listeners

On 7/16/07, William Hoover <[EMAIL PROTECTED]> wrote:
>
> The intent is to track selections. It seems like a lot of extra work to
> maintain quite a few tr:inputHidden components just to capture selection
> values. I see what your saying about post-processing a pattern in JS, but I
> don't think that searching through table for fields might be the best
> solution :)


 For selection the Trinidad table has a built-in selection mechanism -
tableSelection="single|multiple".  Might not be the UI you love best, but
it works.

It seems like a cleaner and less error prone solution would be a renderer
> listener that can be invoked in either the encodeBegin() or encodeEnd()
> methods in the base component. That way a custom component isn't necessary.
> All I would have to do is set the renderer listener on the link component to
> process after the link has been rendered, capture the UIParameter values
> (they will not be null at this stage as they were before the link was
> rendered), and use them in a JS call to populate the selection input (as
> described below). I think this approach would minimize the amount of work it
> takes to implement a custom component, and I'm sure that code execution
> would be more efficient than adding a new component to the mix 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 helpful to fire
> some code before/after any component has been rendered- don't you?


Actually, I was imagining one custom component that exposes a generic
"before/after rendering" listener API.

My concern about adding this to all components is that adding overhead to
every component's rendering + state saving performance when only a small
minority actually use the functionality is very worrisome.  I've very rarely
encountered the need for what you're going for.

-- Adam



-----Original Message-----
> From: Adam Winer [mailto: [EMAIL PROTECTED]
> Sent: Saturday, July 14, 2007 12:30 PM
> To: MyFaces Discussion
> Subject: Re: [Trinidad] Renderer Listeners
>
>
> On 7/13/07, William Hoover <[EMAIL PROTECTED] > wrote:
> > As you guessed it, there are links within each table row that contain
> a f:param that holds data for that row. When the user clicks on that row I
> need to update a separate input field (outside the table- inside the same
> form) with the value from the f:param. I need this to happen on the client
> side before the page submits.
> >
>
> That, I don't get.  Is the intent to track selection in some way?
> Couldn't you just stick a tr:inputHidden in the row and grab that
> value on the client, copying it into that separate input field?   Or,
> for example, running some post-processing in JS (search for fields in
> the table that match a pattern).  Etc.,  there's gotta be a better way
> of handling this.
>
> Alternatively, you could write a simple component of your own that
> doesn't render anything, but gets inserted into the table;  you
> implement its encodeBegin() to
> do your stuff.
>
> -- Adam
>
>
> > I know that I can make this happen using EL in the link's onclick
> attribute based upon the current row data and the separate input field id (
> i.e. onclick="javascript: setInputValue('separateInputFieldId',#{
> row.someValue}';"), 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 sure that it's a good idea to capture the client id for the separate
> input field in this manner due to the client id dependency on naming
> containers. That's why I'm looking for a programmatic solution that will add
> the needed javascript call on an as needed basis before the link/param are
> rendered outside the jsf page.
> >
> > -----Original Message-----
> > From: Adam Winer [mailto:[EMAIL PROTECTED]
> > Sent: Friday, July 13, 2007 3:24 PM
> > To: MyFaces Discussion
> > Subject: Re: [Trinidad] Renderer Listeners
> >
> >
> > Well, that's what you're doing, but doesn't quite explain
> > (A) why the value is null until the link is rendered (though
> > I'm guessing that's because its value comes from the
> > table data)
> > (B) why you need to get the param value for this specific
> > command link within this table (or a specific row
> > of the table?)
> >
> > -- Adam
> >
> >
> > On 7/13/07, William Hoover < [EMAIL PROTECTED]> wrote:
> > > I am trying to get a f:param value from a CoreCommandLink, but the
> value is null until the link has been rendered.
> > >
> > > The link is inside a tr:column- if that helps.
> > >
> > > -----Original Message-----
> > > From: Adam Winer [mailto:[EMAIL PROTECTED]
> > > Sent: Friday, July 13, 2007 2:42 PM
> > > To: MyFaces Discussion
> > > Subject: Re: [Trinidad] Renderer Listeners
> > >
> > >
> > > There's no event listener, but there is that ResponseWriter
> > > API, which will get passed components on startElement().
> > > 99% works (necessarily, because PPR relies on that!).
> > > What functionality are you trying to get here?
> > >
> > > -- Adam
> > >
> > >
> > > On 7/13/07, William Hoover < [EMAIL PROTECTED]> wrote:
> > > > I don't suppose there are any event listeners that can detect when
> components are being rendered? It would be nice if there was a way to be
> able to...
> > > >
> > > > component.addRendererListener(new RendererListener() {
> > > >         public void processRenderBegin(RenderEvent event) {
> > > >                 ...
> > > >         }
> > > >         public void processRenderEnd(RenderEvent event) {
> > > >                 ...
> > > >         }
> > > > });
> > > >
> > > >
> > >
> > >
> >
> >
>
>

Reply via email to