The reason it affects whether the component exists (in application,
although not in memory) is that each piece of phase-processing code
starts with the line:

if (!rendered)  return;

So no phases are executed on non-rendered components.  It's as if they
don't exist.


On 4/27/06, Neuman, Ben J., A&M IRM <[EMAIL PROTECTED]> wrote:
> Mike,
> Thanks for your help. At the moment, however, I do not completely understand
> how the 'rendered' property affects a component's "existence".
>
> From the spec:
>
> public boolean isRendered()
> Return true if this component (and its children) should be rendered during
> the Render Response phase of the request processing lifecycle.
>
> Given the above, I would think what I wish to do makes sense. By the way,
> I'm working on my first JSF project so be patient if I'm completely daft.
>
> Ben
>
>
>
> -----Original Message-----
> From: Mike Kienenberger [mailto:[EMAIL PROTECTED]
> Sent: Thursday, April 27, 2006 10:58 AM
> To: MyFaces Discussion
> Subject: Re: Help me understand component lilfecycle please.
>
>
> On 4/27/06, Neuman, Ben J., A&M IRM <[EMAIL PROTECTED]> wrote:
> > Ok. If my phaseId = RENDER_RESPONSE, beforePhase() is too soon to modify
> the
> > component and afterPhase() is too late? That would seem like a weakness in
> > the spec to me.
>
> If there wasn't a rendered tag, sure, this probably would be a weakness.
>
> However, in this case, I think it's preventing you from doing
> something wrong.   The rendered attribute affects more than whether
> the component is drawn -- it affects whether the component "exists" in
> all phases.   It doesn't make a lot of sense for a component to exist
> without being rendered, and even less sense for it to stop existing
> during validation or model updating when it previously existed.
>
> The proper time to identify the existance of a component is when it's
> first rendered, and it should then continue to "exist" through the
> invoke application phase.
>
> The rendered attribute does exactly this.
>
> The real annoyance is that you can't pass a method (or caller) in EL,
> so it's hard to implement similar behavior:
>
>     rendered="#{bean.shouldRenderTab(thisTab)}"
>
> Depending on what you're doing, you might be able to wrap your tabs in
> a dataList, then you can bind the dataList to "bean" and query the
> dataList for the current tab.
>

Reply via email to