Tonio,
Your description of the phases sounds about right, and it makes sense
why you ran into that problem.
Let me check the diagram in Core JSF, to double-check... yep, Backing
bean shouldn't have been updated when your listener is called. Sounds
like you may have found a bug in the RI, albeit one that was convenient
to you at the time. :)
You said you already have a solution or workaround for this right?
Regards,
Jeff Bischoff
Kenneth L Kurz & Assoc, Inc.
Tonio Caputo wrote:
Matthias,
I'll try to.
This is what I suppose is happening in my faces,
regarding this problem.
1 - Restore View/Apply Request Value/Process Validations Phases
- The Backing Bean is constructed
- Old components are stored in the BackingBean with
their old values or new components are created and
the old values are stored in them
(really don't know exactly).
- The Component Tree is updated with the new values.
2 - ValueChangeListeners are called
- The getValue() of the components returns the old value
- UIComponents are not the same of those in the component tree
3 - UpdateModel Phase
- The UIComponents from the component tree are stored
in the BackingBean.
- This implies the the BackingBean getValue() methods
return the new values.
So when you call event.getSource() (in point (2)) the UIComponent
returned is the one in the component tree, but not the one
in the BackingBean. (this will not happen in ActionEvents that
are executed after the UpdateModel Phase)
In RI in point (2) the values and the components stored in
the BackingBean are those of the new request, that's why it
is working.
Hope it is clearer
if not just ask and I'll try again
Tonio
On Wed, 2006-06-07 at 14:16 -0700, Matthias Wessendorf wrote:
I guess I didn't get you. sorry
so what is different between MyFaces and RI ?
Can you explain more detailed, so that fools like me can follow?
:)
-Matthias
On 6/7/06, Tonio Caputo <[EMAIL PROTECTED]> wrote:
Matthias,
Well, I understood what was going on.
The event source correctly return the UIComponent that
generated the event, the problem is that the
BakingBean Components are not updated during the execution of the
ValueChangeListener.processValueChange() method.
If I look the at the BakingBean after the UpdateModel phase, the
getSource() is correctly containing a reference to the updated
UIComponent.
Thanks a lot, and I will use myFaces valueChangeNotifier for the rest
of my life.
On Mon, 2006-06-05 at 20:12 -0700, Matthias Wessendorf wrote:
Have you tried "getComponent()" which is defined in FacesEvent?
The getSource() comes from java.util.Event clazz.
In MyFaces getComponent() is *only*:
return (UIComponent) getSource();
So can you tell us, what you get form a "getSource()" call?
-Matthias
On 6/5/06, Tonio Caputo <[EMAIL PROTECTED]> wrote:
Hi everybody,
I'm moving my application from sun's implementation
(it's working ok) to myfaces.
I'm using:
jsf 1.1-01
myfaces 1.1.1
I'm having a difference in behavior regarding
valueChangeEvent source.
My application:
~~~~~~~~~~~~~~~
JSP - Jsp with standard JSF components,
all bound to components in a java Page
Page - Java class with all components of the JSP page
- It adds ValueChangeListeners to the components
who need it.
- Request Scope
My code for ValueChangeListener looks something like this:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public void processValueChange(ValueChangeEvent ev)
{
......
Object src=ev.getSource();
if ( src.equals(_cmbCountry) ) do.......
else if ( src.equals(_cmbAnyCode) ) do........
else if ( src.equals(_cmbState) ) do......
else
do nothing .......
........
}
where _cmbXXX are HtmlSelectOneMenu components
defined in the Page class.
The problem:
~~~~~~~~~~~~
In my faces, the event source does not match any of the
the components, in sun's implementation it does.
If I change the equals function for ==, it doesn't work
either (as expected, there is a new Page for each request)
The question:
~~~~~~~~~~~~~
Is this OK, a myfaces problem, a bad implementation (as usual)
of sun's reference, or just worked by chance ?
The solution of this problem is easy, I'm just checking to see
what goes on.
Thanks in advance
tonio