Are you not storing your old value on the session?  If not, you might
look at the x:saveState component.


On Mon, 07 Feb 2005 16:48:24 +0200, Dani Kenan <[EMAIL PROTECTED]> wrote:
> You are completely right.
> 
> However, for the sake of argument, you should know that the problem is
> manifested in ALL input component due to the responsible code residing in
> UIComponent.validate() which all subcomponent are required to call using
> super.validate() according to the javadoc.
> 
> So this solution cannot be considered even as a temporary workaround, as I
> might end up inheriting every component I use.
> 
> 
> > -----Original Message-----
> > From: Heath Borders [mailto:[EMAIL PROTECTED]
> > Sent: Monday, February 07, 2005 4:04 PM
> > To: MyFaces Discussion
> > Subject: Re: Serious inherent problem with the JSF framework life cycle
> > and value binding handling?
> >
> > Just for the sake of argument, you could extend the renderer for
> > whichever component is giving you the trouble, and change its
> > encode/decode behavior so that it saves the value in its attributes
> > map.
> >
> >
> > On Mon, 07 Feb 2005 11:25:18 +0200, Dani Kenan <[EMAIL PROTECTED]>
> > wrote:
> > >
> > >
> > > > -----Original Message-----
> > > > From: Craig McClanahan [mailto:[EMAIL PROTECTED]
> > > > Sent: Monday, February 07, 2005 3:01 AM
> > > > To: MyFaces Discussion
> > > > Cc: Sean Schofield
> > > > Subject: Re: Serious inherent problem with the JSF framework life
> > cycle
> > > > and value binding handling?
> > > >
> > > > On Mon, 07 Feb 2005 02:46:05 +0200, Dani Kenan
> > <[EMAIL PROTECTED]>
> > > > wrote:
> > > >
> > > > >
> > > > > It seems quite clear that change event handlers cannot be used
> > together
> > > > with
> > > > > value properties bound to request scope beans, since they will
> > always be
> > > > > invoked.
> > > >
> > > > JSF promises to keep the expressions for all value binding expressions
> > > > that you have set, plus values that you have set directly (not using
> > > > value bindings).  If you are expecting the framework to keep the
> > > > values that your VB expressions point at, you are expecting something
> > > > beyond what is promised.
> > >
> > > [Dani Kenan] My only expectation is that the value change listener fires
> > > only when the value changes. Is that too much to ask?
> > >
> > > How this is implemented is not the issue. I did not request the
> > framework to
> > > keep the value that VB expressions point at. In any case even if this is
> > > required in order to fix the way change events are determined, it can be
> > > kept and regarded as an implementation detail and not exposed as a
> > general
> > > feature of the framework.
> > >
> > > The spec reads:
> > >
> > > "2.5.1.3 Executing Validation
> > > ... The converted value is pushed into the component's setValue()
> > method,
> > > and a ValueChangeEvent is fired if the value has changed."
> > >
> > > There is nothing in the spec which prevents a fix. It's a matter of
> > > interpreting what "value has changed" means. I suggest the intuitive
> > > interpretation: changed between the last and current requests.
> > >
> > > >
> > > > If you want to use value change events and request scope backing
> > > > beans, you should bind the *component* into the backing bean instead
> > > > of the *value*.  This would cause the following adjustment to your
> > > > initial example:
> > > >
> > > > <h:selectOneMenu id="typeName"
> > > >   binding="#{typeListPage.typeName}"
> > > >   valueChangeListener="#{typeListPage.onChangeTypeName}">
> > > >          <f:selectItems value="#{typeNameSelectItems}" />
> > > > <h:selectOneMenu>
> > > >
> > > > with the following property in your bean that "typeListPage" points
> > at:
> > > >
> > > >     private HtmlSelectOneMenu typeName = null;
> > > >
> > > >     public HtmlSelectOneMenu getTypeName()
> > > >     { return this.typeName; }
> > > >
> > > >     public void setTypeName(HtmlSelectOneMenu typeName)
> > > >     { this.typeName = typeName; }
> > > >
> > > > In this scenario, JSF saves the value of the component across requests
> > > > (and restores the component reference by calling setTypeName() during
> > > > Restore View phase, so that value change events only fire if the value
> > > > actually changes, as you expect.
> > > >
> > > > If you use value binding expressions, it is your application's
> > > > responsibility to maintain the appropriate state.
> > > >
> > > > Craig McClanahan
> > >
> > > [Dani Kenan] Doesn't this means that for request scoped beans with event
> > > handler the model we must follow is that of ASP.NET?
> > >
> > > Jsf allows you to bind to model elements (value binding) and to ui
> > > components (component binding) where as ASP.NET allows only its version
> > of
> > > component binding, pumping the values between the components and a model
> > is
> > > the developer's job. This results in many ASP.NET applications not
> > having a
> > > backing model at all (and I am talking about complex applications that
> > > should have used one).
> > >
> > > I liked jsf idea of binding to the model better. It would be regretful
> > if it
> > > becomes less usable due to this limitation.
> > >
> > > You suggest resorting to control binding whenever a change listener is
> > > needed. However, this results in some of the ui tree components being
> > > updated automatically and others manually. This inconsistency leads to
> > less
> > > clean design and much less readable code.
> > >
> > > Developers with consistency in mind might feel better off using
> > component
> > > binding all along (ignoring the possibility of value binding) - thus
> > follow
> > > ASP.NET paradigm and end up with the same pitfalls.
> > >
> > > Another reply to my post by Sean Schofield suggested I dump the change
> > > listeners and use the life cycle events in a framework like Struts Shale
> > > (which I suspect you are quite familiar with...) to determine changes
> > and
> > > populate model elements on my own.
> > >
> > > Sean's solution is viable and preserves consistency. And I liked what
> > Struts
> > > Shale has to offer without regard to the value change issue (isPostBack
> > flag
> > > and prerender event to start with).
> > >
> > > Never the less, I still cannot see why I must either move my beans to
> > the
> > > session, or bind to controls and not the model, or neglect event driven
> > > programming all along in order to fix this issue of "value change events
> > > fire without any reason".
> > >
> > > Dani Kenan
> > >
> > >
> >
> >
> > --
> > -Heath Borders-Wing
> > [EMAIL PROTECTED]
> 
> 


-- 
-Heath Borders-Wing
[EMAIL PROTECTED]

Reply via email to