Hello,

I've encountered the same problem recently and I've also figured out the reason. It's because the method setProperties() is called twice. Usually you wouldn't notice this behaviour as most properties just will be overridden but that's not the case for a ValueChangeListener (or an ActionListener). For a better understanding of this issue, I'll describe the call hierachy (somewhat simplified):

///
// myfaces/core/branches/1_2_1/api/javax/faces/webapp/UIComponentClassicTagBase.java

protected UIComponent findComponent(FacesContext context)
{
       // ...
       // around line 1097

       _componentInstance = findComponent(parent,id);
       if (_componentInstance == null)
       {
               _componentInstance = createComponent(context, id);
               _created = true;
setProperties(_componentInstance); // << here is the "first" call
               // ....

\\\

///
// myfaces/core/branches/1_2_1/api/javax/faces/webapp/UIComponentELTag.java

protected UIComponent createComponent(FacesContext context, String newId)
{
       // ...
       // around line 98

       component.setId(newId);
setProperties(component); // << her is the "second" call (it's actually the first, but it's the one I would omit)

       return component;
}

\\\

I'll create a JIRA issue (including the appropriate patch) in a few hours, or maybe anyone else might be taking a look in the meantime.

regards,
Bernhard

Fan Shao wrote:
Hi,
When trying to trace down the problem I posted a few days ago
(http://www.nabble.com/Button-must-be-clicked-once-before-it-could-actually-do-something-tf4297733.html#a12234990)
I found some of the events are fired twice, where they are supposed to be
fired only once.

The screen contains a datatable, and a dropdown box. When the user selects a
value of the dropdown box, the form is submitted using this.form.submit(),
and the datatable is reloaded according to user's selection. Everytime the
datatable is reloaded its associated handler is called twice.

Anyone has any idea about this?

Many thanks!

Fan

Reply via email to