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












Reply via email to