Yes, that would be awesome. I actually made a wrapper component doing just
that in a project. JSF 1.2 also allows that on <f:view> which is better than
nothing, but support on most component would be more useful and interesting
to trap evil components not acting like expected.


On 7/18/07, Adam Winer <[EMAIL PROTECTED]> wrote:

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