You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Richard Yee <ri...@gmail.com> on 2008/07/09 06:14:14 UTC

[Trinidad] Updating a component value from a selectOneChoice value change listener

Hi,
I'm having a problem updating the value of a inputText component from
the value change listener of a selectOneChoice component.  I have the
following in my jspx page:

  <f:view>
    <tr:document title="Index">
      <trh:body>
        <tr:form>
          <tr:selectOneChoice id="memberSelect" value="#{myBacking.selectValue}"
            valueChangeListener="#{myBacking.changeListener}"
            autoSubmit="true" >
            <tr:selectItem label="Item 1" value="1"/>
            <tr:selectItem label="Item 2" value="2"/>
            <tr:selectItem label="Item 3" value="3"/>
          </tr:selectOneChoice>
          <tr:inputText value="#{myBacking.line2}" label="Line 2:"
            partialTriggers="memberSelect" id="line2"/>

        </tr:form>
      </trh:body>
    </tr:document>
  </f:view>

My value change listener in my backing bean is
  public void changeListener(ValueChangeEvent evt) {
    setLine2("XXXX");  }
}
When I run the page, if I only change the value of selectOneChoice,
then "XXXX" gets populated in the input text box as I expected.
However, if I type something in the inputText component and then
change the value of the selectOneChoice, the value that I typed
remains in the input text box. If I then change the value of the
select box again, then "XXXX" gets populated in the text box. I'm
wondering why it takes a second time through the value Change Listener
for the input text component to be updated with the value that is set
in the listener method.

Thanks for any help or suggestions in advance,

Richard

Re: [Trinidad] Updating a component value from a selectOneChoice value change listener

Posted by Richard Yee <ri...@gmail.com>.
Andrew,
Thanks. That worked great.

-Richard


On Wed, Jul 9, 2008 at 9:40 AM, Andrew Robinson
<an...@gmail.com> wrote:
> You would need to implement it yourself
>
> I already added it to the wiki a long time back:
>
> http://wiki.apache.org/myfaces/JavascriptWithJavaServerFaces
>
> Look at the "Using javascript and command links to submit a form from
> a control event" section
>
> On Wed, Jul 9, 2008 at 10:28 AM, Richard Yee <ri...@gmail.com> wrote:
>> Andrew,
>> Sorry to be dense, but is 'click' a JavaScript function in Trinidad,
>> or do I need to implement that function myself in the page?
>>
>> Thanks,
>>
>> Richard
>>
>>
>> On 7/9/08, Andrew Robinson <an...@gmail.com> wrote:
>>> Oh, if you queue you own action event you have to use an action
>>> listener since selectOneChoice has no action or actionListener
>>> attributes.
>>>
>>> On Wed, Jul 9, 2008 at 9:18 AM, Andrew Robinson
>>> <an...@gmail.com> wrote:
>>> > There is no way to have the selectOneChoice fire an action event, but
>>> > you can hack it by removing the autoSumbit.
>>> >
>>> > <tr:selectOneChoice onchange="click('commandLink')">
>>> > </tr:selectOneChoice>
>>> >
>>> > <tr:commandLink id="commandLink" inlineStyle="display:none;" action="blah" />
>>> >
>>> > Then use the click function to raise the click event on the link. You
>>> > can also use the Trinidad PPR API to manually submit an event for the
>>> > commandLink. Just make sure you use the full clientId of the
>>> > commandLink.
>>> >
>>> > I have had some ideas on enhancing PPR with Trinidad and the ability
>>> > to generate events and wrap events on queuing, but even if ppl. agree
>>> > to the design, it would be a while before such a thing was released.
>>> >
>>> > You could also queue you own action event:
>>> >
>>> > public void onPropertyChange(PropertyChangeEvent evt) {
>>> >  ActionEvent e = new ActionEvent(evt.getSource);
>>> >  e.setPhaseId(PhaseId.INVOKE_APPLICATION);
>>> >  e.queue();
>>> > }
>>> >
>>> > -Andrew
>>> >
>>> > On Wed, Jul 9, 2008 at 6:07 AM, Richard Yee <ri...@gmail.com> wrote:
>>> >> Andrew,
>>> >> Thanks for your help. We are using JSF 1.1 so I don't think the
>>> >> f:setPropertyActionListener solution will work for us. I tried just
>>> >> putting tr:subform around the inputText and now it doesn't update it
>>> >> at all. Perhaps there is a different way to implement my page?
>>> >> The functionality that I am trying to achieve is to use a
>>> >> selectOneChoice component to select a person from a list of persons to
>>> >> edit. Currently, I am using a valueChangeListener in the
>>> >> selectOneChoice to detect when a person is selected and then update
>>> >> the input components with that persons information. This is where I am
>>> >> having the problem. I would like to avoid using the tomahawk solution
>>> >> since the project doesn't currently use tomahawk and I don't really
>>> >> want to add it just for this problem. Is there any way to have the
>>> >> selectOneChoice fire an action event? If I could do that, then I
>>> >> wouldn't need to use the value change listener.
>>> >>
>>> >> Thanks,
>>> >>
>>> >> Richard
>>> >>
>>> >>
>>> >>
>>> >> On Tue, Jul 8, 2008 at 10:37 PM, Andrew Robinson
>>> >> <an...@gmail.com> wrote:
>>> >>> Value change listeners are fired during validation.
>>> >>>
>>> >>> What happens:
>>> >>>
>>> >>> 1) decode
>>> >>> 1a) select one choice decoded - submitted value set
>>> >>> 1b) input text decoded - submitted value set
>>> >>> 2) validation
>>> >>> 2a) select one choice converts submitted value
>>> >>> 2b) select one choice validates value
>>> >>> 2c) select one choice queues value change event (phase = ANY)
>>> >>> 2d) input text converts submitted value
>>> >>> 2e) input text validates value
>>> >>> 2f) input text queues value change event (phase = ANY)
>>> >>> 2g) value change events broadcast
>>> >>> 3) update model
>>> >>> 3a) select one choice updates value
>>> >>> 3b) input text updates value
>>> >>>
>>> >>> As you can see, it is useless to set values in a value change
>>> >>> listeners that have UIInput components updating them. In fact, it is
>>> >>> very dangerous to make any changes during a value change event,
>>> >>> because at that phase, there is absolutely no guarantee that the
>>> >>> updating of the model will ever happen. Therefore if your bean sets a
>>> >>> property and something short circuits the lifecycle, then the
>>> >>> "transaction" is broken.
>>> >>>
>>> >>> I would suggest one of:
>>> >>> 1) use the myfaces tomahawk sandbox valueChangeNotifier that runs
>>> >>> during update, not validation:
>>> >>> http://myfaces.apache.org/sandbox/tlddoc/s/valueChangeNotifier.html
>>> >>> 2) use f:setPropertyActionListener instead of using value change events
>>> >>> 3) use tr:subForm around the controls to make sure that when the
>>> >>> selectOneChoice is submitted, the inputText is not submitted (note
>>> >>> that I don't think that this solution will work for browsers that do
>>> >>> not support AJAX)
>>> >>>
>>> >>> -Andrew
>>> >>>
>>> >>> On Tue, Jul 8, 2008 at 10:14 PM, Richard Yee <ri...@gmail.com> wrote:
>>> >>>> Hi,
>>> >>>> I'm having a problem updating the value of a inputText component from
>>> >>>> the value change listener of a selectOneChoice component.  I have the
>>> >>>> following in my jspx page:
>>> >>>>
>>> >>>>  <f:view>
>>> >>>>    <tr:document title="Index">
>>> >>>>      <trh:body>
>>> >>>>        <tr:form>
>>> >>>>          <tr:selectOneChoice id="memberSelect" value="#{myBacking.selectValue}"
>>> >>>>            valueChangeListener="#{myBacking.changeListener}"
>>> >>>>            autoSubmit="true" >
>>> >>>>            <tr:selectItem label="Item 1" value="1"/>
>>> >>>>            <tr:selectItem label="Item 2" value="2"/>
>>> >>>>            <tr:selectItem label="Item 3" value="3"/>
>>> >>>>          </tr:selectOneChoice>
>>> >>>>          <tr:inputText value="#{myBacking.line2}" label="Line 2:"
>>> >>>>            partialTriggers="memberSelect" id="line2"/>
>>> >>>>
>>> >>>>        </tr:form>
>>> >>>>      </trh:body>
>>> >>>>    </tr:document>
>>> >>>>  </f:view>
>>> >>>>
>>> >>>> My value change listener in my backing bean is
>>> >>>>  public void changeListener(ValueChangeEvent evt) {
>>> >>>>    setLine2("XXXX");  }
>>> >>>> }
>>> >>>> When I run the page, if I only change the value of selectOneChoice,
>>> >>>> then "XXXX" gets populated in the input text box as I expected.
>>> >>>> However, if I type something in the inputText component and then
>>> >>>> change the value of the selectOneChoice, the value that I typed
>>> >>>> remains in the input text box. If I then change the value of the
>>> >>>> select box again, then "XXXX" gets populated in the text box. I'm
>>> >>>> wondering why it takes a second time through the value Change Listener
>>> >>>> for the input text component to be updated with the value that is set
>>> >>>> in the listener method.
>>> >>>>
>>> >>>> Thanks for any help or suggestions in advance,
>>> >>>>
>>> >>>> Richard
>>> >>>>
>>> >>>
>>> >>
>>> >
>>>
>>
>

Re: [Trinidad] Updating a component value from a selectOneChoice value change listener

Posted by Andrew Robinson <an...@gmail.com>.
You would need to implement it yourself

I already added it to the wiki a long time back:

http://wiki.apache.org/myfaces/JavascriptWithJavaServerFaces

Look at the "Using javascript and command links to submit a form from
a control event" section

On Wed, Jul 9, 2008 at 10:28 AM, Richard Yee <ri...@gmail.com> wrote:
> Andrew,
> Sorry to be dense, but is 'click' a JavaScript function in Trinidad,
> or do I need to implement that function myself in the page?
>
> Thanks,
>
> Richard
>
>
> On 7/9/08, Andrew Robinson <an...@gmail.com> wrote:
>> Oh, if you queue you own action event you have to use an action
>> listener since selectOneChoice has no action or actionListener
>> attributes.
>>
>> On Wed, Jul 9, 2008 at 9:18 AM, Andrew Robinson
>> <an...@gmail.com> wrote:
>> > There is no way to have the selectOneChoice fire an action event, but
>> > you can hack it by removing the autoSumbit.
>> >
>> > <tr:selectOneChoice onchange="click('commandLink')">
>> > </tr:selectOneChoice>
>> >
>> > <tr:commandLink id="commandLink" inlineStyle="display:none;" action="blah" />
>> >
>> > Then use the click function to raise the click event on the link. You
>> > can also use the Trinidad PPR API to manually submit an event for the
>> > commandLink. Just make sure you use the full clientId of the
>> > commandLink.
>> >
>> > I have had some ideas on enhancing PPR with Trinidad and the ability
>> > to generate events and wrap events on queuing, but even if ppl. agree
>> > to the design, it would be a while before such a thing was released.
>> >
>> > You could also queue you own action event:
>> >
>> > public void onPropertyChange(PropertyChangeEvent evt) {
>> >  ActionEvent e = new ActionEvent(evt.getSource);
>> >  e.setPhaseId(PhaseId.INVOKE_APPLICATION);
>> >  e.queue();
>> > }
>> >
>> > -Andrew
>> >
>> > On Wed, Jul 9, 2008 at 6:07 AM, Richard Yee <ri...@gmail.com> wrote:
>> >> Andrew,
>> >> Thanks for your help. We are using JSF 1.1 so I don't think the
>> >> f:setPropertyActionListener solution will work for us. I tried just
>> >> putting tr:subform around the inputText and now it doesn't update it
>> >> at all. Perhaps there is a different way to implement my page?
>> >> The functionality that I am trying to achieve is to use a
>> >> selectOneChoice component to select a person from a list of persons to
>> >> edit. Currently, I am using a valueChangeListener in the
>> >> selectOneChoice to detect when a person is selected and then update
>> >> the input components with that persons information. This is where I am
>> >> having the problem. I would like to avoid using the tomahawk solution
>> >> since the project doesn't currently use tomahawk and I don't really
>> >> want to add it just for this problem. Is there any way to have the
>> >> selectOneChoice fire an action event? If I could do that, then I
>> >> wouldn't need to use the value change listener.
>> >>
>> >> Thanks,
>> >>
>> >> Richard
>> >>
>> >>
>> >>
>> >> On Tue, Jul 8, 2008 at 10:37 PM, Andrew Robinson
>> >> <an...@gmail.com> wrote:
>> >>> Value change listeners are fired during validation.
>> >>>
>> >>> What happens:
>> >>>
>> >>> 1) decode
>> >>> 1a) select one choice decoded - submitted value set
>> >>> 1b) input text decoded - submitted value set
>> >>> 2) validation
>> >>> 2a) select one choice converts submitted value
>> >>> 2b) select one choice validates value
>> >>> 2c) select one choice queues value change event (phase = ANY)
>> >>> 2d) input text converts submitted value
>> >>> 2e) input text validates value
>> >>> 2f) input text queues value change event (phase = ANY)
>> >>> 2g) value change events broadcast
>> >>> 3) update model
>> >>> 3a) select one choice updates value
>> >>> 3b) input text updates value
>> >>>
>> >>> As you can see, it is useless to set values in a value change
>> >>> listeners that have UIInput components updating them. In fact, it is
>> >>> very dangerous to make any changes during a value change event,
>> >>> because at that phase, there is absolutely no guarantee that the
>> >>> updating of the model will ever happen. Therefore if your bean sets a
>> >>> property and something short circuits the lifecycle, then the
>> >>> "transaction" is broken.
>> >>>
>> >>> I would suggest one of:
>> >>> 1) use the myfaces tomahawk sandbox valueChangeNotifier that runs
>> >>> during update, not validation:
>> >>> http://myfaces.apache.org/sandbox/tlddoc/s/valueChangeNotifier.html
>> >>> 2) use f:setPropertyActionListener instead of using value change events
>> >>> 3) use tr:subForm around the controls to make sure that when the
>> >>> selectOneChoice is submitted, the inputText is not submitted (note
>> >>> that I don't think that this solution will work for browsers that do
>> >>> not support AJAX)
>> >>>
>> >>> -Andrew
>> >>>
>> >>> On Tue, Jul 8, 2008 at 10:14 PM, Richard Yee <ri...@gmail.com> wrote:
>> >>>> Hi,
>> >>>> I'm having a problem updating the value of a inputText component from
>> >>>> the value change listener of a selectOneChoice component.  I have the
>> >>>> following in my jspx page:
>> >>>>
>> >>>>  <f:view>
>> >>>>    <tr:document title="Index">
>> >>>>      <trh:body>
>> >>>>        <tr:form>
>> >>>>          <tr:selectOneChoice id="memberSelect" value="#{myBacking.selectValue}"
>> >>>>            valueChangeListener="#{myBacking.changeListener}"
>> >>>>            autoSubmit="true" >
>> >>>>            <tr:selectItem label="Item 1" value="1"/>
>> >>>>            <tr:selectItem label="Item 2" value="2"/>
>> >>>>            <tr:selectItem label="Item 3" value="3"/>
>> >>>>          </tr:selectOneChoice>
>> >>>>          <tr:inputText value="#{myBacking.line2}" label="Line 2:"
>> >>>>            partialTriggers="memberSelect" id="line2"/>
>> >>>>
>> >>>>        </tr:form>
>> >>>>      </trh:body>
>> >>>>    </tr:document>
>> >>>>  </f:view>
>> >>>>
>> >>>> My value change listener in my backing bean is
>> >>>>  public void changeListener(ValueChangeEvent evt) {
>> >>>>    setLine2("XXXX");  }
>> >>>> }
>> >>>> When I run the page, if I only change the value of selectOneChoice,
>> >>>> then "XXXX" gets populated in the input text box as I expected.
>> >>>> However, if I type something in the inputText component and then
>> >>>> change the value of the selectOneChoice, the value that I typed
>> >>>> remains in the input text box. If I then change the value of the
>> >>>> select box again, then "XXXX" gets populated in the text box. I'm
>> >>>> wondering why it takes a second time through the value Change Listener
>> >>>> for the input text component to be updated with the value that is set
>> >>>> in the listener method.
>> >>>>
>> >>>> Thanks for any help or suggestions in advance,
>> >>>>
>> >>>> Richard
>> >>>>
>> >>>
>> >>
>> >
>>
>

Re: [Trinidad] Updating a component value from a selectOneChoice value change listener

Posted by Richard Yee <ri...@gmail.com>.
Andrew,
Sorry to be dense, but is 'click' a JavaScript function in Trinidad,
or do I need to implement that function myself in the page?

Thanks,

Richard


On 7/9/08, Andrew Robinson <an...@gmail.com> wrote:
> Oh, if you queue you own action event you have to use an action
> listener since selectOneChoice has no action or actionListener
> attributes.
>
> On Wed, Jul 9, 2008 at 9:18 AM, Andrew Robinson
> <an...@gmail.com> wrote:
> > There is no way to have the selectOneChoice fire an action event, but
> > you can hack it by removing the autoSumbit.
> >
> > <tr:selectOneChoice onchange="click('commandLink')">
> > </tr:selectOneChoice>
> >
> > <tr:commandLink id="commandLink" inlineStyle="display:none;" action="blah" />
> >
> > Then use the click function to raise the click event on the link. You
> > can also use the Trinidad PPR API to manually submit an event for the
> > commandLink. Just make sure you use the full clientId of the
> > commandLink.
> >
> > I have had some ideas on enhancing PPR with Trinidad and the ability
> > to generate events and wrap events on queuing, but even if ppl. agree
> > to the design, it would be a while before such a thing was released.
> >
> > You could also queue you own action event:
> >
> > public void onPropertyChange(PropertyChangeEvent evt) {
> >  ActionEvent e = new ActionEvent(evt.getSource);
> >  e.setPhaseId(PhaseId.INVOKE_APPLICATION);
> >  e.queue();
> > }
> >
> > -Andrew
> >
> > On Wed, Jul 9, 2008 at 6:07 AM, Richard Yee <ri...@gmail.com> wrote:
> >> Andrew,
> >> Thanks for your help. We are using JSF 1.1 so I don't think the
> >> f:setPropertyActionListener solution will work for us. I tried just
> >> putting tr:subform around the inputText and now it doesn't update it
> >> at all. Perhaps there is a different way to implement my page?
> >> The functionality that I am trying to achieve is to use a
> >> selectOneChoice component to select a person from a list of persons to
> >> edit. Currently, I am using a valueChangeListener in the
> >> selectOneChoice to detect when a person is selected and then update
> >> the input components with that persons information. This is where I am
> >> having the problem. I would like to avoid using the tomahawk solution
> >> since the project doesn't currently use tomahawk and I don't really
> >> want to add it just for this problem. Is there any way to have the
> >> selectOneChoice fire an action event? If I could do that, then I
> >> wouldn't need to use the value change listener.
> >>
> >> Thanks,
> >>
> >> Richard
> >>
> >>
> >>
> >> On Tue, Jul 8, 2008 at 10:37 PM, Andrew Robinson
> >> <an...@gmail.com> wrote:
> >>> Value change listeners are fired during validation.
> >>>
> >>> What happens:
> >>>
> >>> 1) decode
> >>> 1a) select one choice decoded - submitted value set
> >>> 1b) input text decoded - submitted value set
> >>> 2) validation
> >>> 2a) select one choice converts submitted value
> >>> 2b) select one choice validates value
> >>> 2c) select one choice queues value change event (phase = ANY)
> >>> 2d) input text converts submitted value
> >>> 2e) input text validates value
> >>> 2f) input text queues value change event (phase = ANY)
> >>> 2g) value change events broadcast
> >>> 3) update model
> >>> 3a) select one choice updates value
> >>> 3b) input text updates value
> >>>
> >>> As you can see, it is useless to set values in a value change
> >>> listeners that have UIInput components updating them. In fact, it is
> >>> very dangerous to make any changes during a value change event,
> >>> because at that phase, there is absolutely no guarantee that the
> >>> updating of the model will ever happen. Therefore if your bean sets a
> >>> property and something short circuits the lifecycle, then the
> >>> "transaction" is broken.
> >>>
> >>> I would suggest one of:
> >>> 1) use the myfaces tomahawk sandbox valueChangeNotifier that runs
> >>> during update, not validation:
> >>> http://myfaces.apache.org/sandbox/tlddoc/s/valueChangeNotifier.html
> >>> 2) use f:setPropertyActionListener instead of using value change events
> >>> 3) use tr:subForm around the controls to make sure that when the
> >>> selectOneChoice is submitted, the inputText is not submitted (note
> >>> that I don't think that this solution will work for browsers that do
> >>> not support AJAX)
> >>>
> >>> -Andrew
> >>>
> >>> On Tue, Jul 8, 2008 at 10:14 PM, Richard Yee <ri...@gmail.com> wrote:
> >>>> Hi,
> >>>> I'm having a problem updating the value of a inputText component from
> >>>> the value change listener of a selectOneChoice component.  I have the
> >>>> following in my jspx page:
> >>>>
> >>>>  <f:view>
> >>>>    <tr:document title="Index">
> >>>>      <trh:body>
> >>>>        <tr:form>
> >>>>          <tr:selectOneChoice id="memberSelect" value="#{myBacking.selectValue}"
> >>>>            valueChangeListener="#{myBacking.changeListener}"
> >>>>            autoSubmit="true" >
> >>>>            <tr:selectItem label="Item 1" value="1"/>
> >>>>            <tr:selectItem label="Item 2" value="2"/>
> >>>>            <tr:selectItem label="Item 3" value="3"/>
> >>>>          </tr:selectOneChoice>
> >>>>          <tr:inputText value="#{myBacking.line2}" label="Line 2:"
> >>>>            partialTriggers="memberSelect" id="line2"/>
> >>>>
> >>>>        </tr:form>
> >>>>      </trh:body>
> >>>>    </tr:document>
> >>>>  </f:view>
> >>>>
> >>>> My value change listener in my backing bean is
> >>>>  public void changeListener(ValueChangeEvent evt) {
> >>>>    setLine2("XXXX");  }
> >>>> }
> >>>> When I run the page, if I only change the value of selectOneChoice,
> >>>> then "XXXX" gets populated in the input text box as I expected.
> >>>> However, if I type something in the inputText component and then
> >>>> change the value of the selectOneChoice, the value that I typed
> >>>> remains in the input text box. If I then change the value of the
> >>>> select box again, then "XXXX" gets populated in the text box. I'm
> >>>> wondering why it takes a second time through the value Change Listener
> >>>> for the input text component to be updated with the value that is set
> >>>> in the listener method.
> >>>>
> >>>> Thanks for any help or suggestions in advance,
> >>>>
> >>>> Richard
> >>>>
> >>>
> >>
> >
>

Re: [Trinidad] Updating a component value from a selectOneChoice value change listener

Posted by Richard Yee <ri...@gmail.com>.
Andrew,
Thanks for your suggestions. I'll give them a try. BTW, I never was
able to get the tr:subform working.

-Richard

On 7/9/08, Andrew Robinson <an...@gmail.com> wrote:
> Oh, if you queue you own action event you have to use an action
> listener since selectOneChoice has no action or actionListener
> attributes.
>
> On Wed, Jul 9, 2008 at 9:18 AM, Andrew Robinson
> <an...@gmail.com> wrote:
> > There is no way to have the selectOneChoice fire an action event, but
> > you can hack it by removing the autoSumbit.
> >
> > <tr:selectOneChoice onchange="click('commandLink')">
> > </tr:selectOneChoice>
> >
> > <tr:commandLink id="commandLink" inlineStyle="display:none;" action="blah" />
> >
> > Then use the click function to raise the click event on the link. You
> > can also use the Trinidad PPR API to manually submit an event for the
> > commandLink. Just make sure you use the full clientId of the
> > commandLink.
> >
> > I have had some ideas on enhancing PPR with Trinidad and the ability
> > to generate events and wrap events on queuing, but even if ppl. agree
> > to the design, it would be a while before such a thing was released.
> >
> > You could also queue you own action event:
> >
> > public void onPropertyChange(PropertyChangeEvent evt) {
> >  ActionEvent e = new ActionEvent(evt.getSource);
> >  e.setPhaseId(PhaseId.INVOKE_APPLICATION);
> >  e.queue();
> > }
> >
> > -Andrew
> >
> > On Wed, Jul 9, 2008 at 6:07 AM, Richard Yee <ri...@gmail.com> wrote:
> >> Andrew,
> >> Thanks for your help. We are using JSF 1.1 so I don't think the
> >> f:setPropertyActionListener solution will work for us. I tried just
> >> putting tr:subform around the inputText and now it doesn't update it
> >> at all. Perhaps there is a different way to implement my page?
> >> The functionality that I am trying to achieve is to use a
> >> selectOneChoice component to select a person from a list of persons to
> >> edit. Currently, I am using a valueChangeListener in the
> >> selectOneChoice to detect when a person is selected and then update
> >> the input components with that persons information. This is where I am
> >> having the problem. I would like to avoid using the tomahawk solution
> >> since the project doesn't currently use tomahawk and I don't really
> >> want to add it just for this problem. Is there any way to have the
> >> selectOneChoice fire an action event? If I could do that, then I
> >> wouldn't need to use the value change listener.
> >>
> >> Thanks,
> >>
> >> Richard
> >>
> >>
> >>
> >> On Tue, Jul 8, 2008 at 10:37 PM, Andrew Robinson
> >> <an...@gmail.com> wrote:
> >>> Value change listeners are fired during validation.
> >>>
> >>> What happens:
> >>>
> >>> 1) decode
> >>> 1a) select one choice decoded - submitted value set
> >>> 1b) input text decoded - submitted value set
> >>> 2) validation
> >>> 2a) select one choice converts submitted value
> >>> 2b) select one choice validates value
> >>> 2c) select one choice queues value change event (phase = ANY)
> >>> 2d) input text converts submitted value
> >>> 2e) input text validates value
> >>> 2f) input text queues value change event (phase = ANY)
> >>> 2g) value change events broadcast
> >>> 3) update model
> >>> 3a) select one choice updates value
> >>> 3b) input text updates value
> >>>
> >>> As you can see, it is useless to set values in a value change
> >>> listeners that have UIInput components updating them. In fact, it is
> >>> very dangerous to make any changes during a value change event,
> >>> because at that phase, there is absolutely no guarantee that the
> >>> updating of the model will ever happen. Therefore if your bean sets a
> >>> property and something short circuits the lifecycle, then the
> >>> "transaction" is broken.
> >>>
> >>> I would suggest one of:
> >>> 1) use the myfaces tomahawk sandbox valueChangeNotifier that runs
> >>> during update, not validation:
> >>> http://myfaces.apache.org/sandbox/tlddoc/s/valueChangeNotifier.html
> >>> 2) use f:setPropertyActionListener instead of using value change events
> >>> 3) use tr:subForm around the controls to make sure that when the
> >>> selectOneChoice is submitted, the inputText is not submitted (note
> >>> that I don't think that this solution will work for browsers that do
> >>> not support AJAX)
> >>>
> >>> -Andrew
> >>>
> >>> On Tue, Jul 8, 2008 at 10:14 PM, Richard Yee <ri...@gmail.com> wrote:
> >>>> Hi,
> >>>> I'm having a problem updating the value of a inputText component from
> >>>> the value change listener of a selectOneChoice component.  I have the
> >>>> following in my jspx page:
> >>>>
> >>>>  <f:view>
> >>>>    <tr:document title="Index">
> >>>>      <trh:body>
> >>>>        <tr:form>
> >>>>          <tr:selectOneChoice id="memberSelect" value="#{myBacking.selectValue}"
> >>>>            valueChangeListener="#{myBacking.changeListener}"
> >>>>            autoSubmit="true" >
> >>>>            <tr:selectItem label="Item 1" value="1"/>
> >>>>            <tr:selectItem label="Item 2" value="2"/>
> >>>>            <tr:selectItem label="Item 3" value="3"/>
> >>>>          </tr:selectOneChoice>
> >>>>          <tr:inputText value="#{myBacking.line2}" label="Line 2:"
> >>>>            partialTriggers="memberSelect" id="line2"/>
> >>>>
> >>>>        </tr:form>
> >>>>      </trh:body>
> >>>>    </tr:document>
> >>>>  </f:view>
> >>>>
> >>>> My value change listener in my backing bean is
> >>>>  public void changeListener(ValueChangeEvent evt) {
> >>>>    setLine2("XXXX");  }
> >>>> }
> >>>> When I run the page, if I only change the value of selectOneChoice,
> >>>> then "XXXX" gets populated in the input text box as I expected.
> >>>> However, if I type something in the inputText component and then
> >>>> change the value of the selectOneChoice, the value that I typed
> >>>> remains in the input text box. If I then change the value of the
> >>>> select box again, then "XXXX" gets populated in the text box. I'm
> >>>> wondering why it takes a second time through the value Change Listener
> >>>> for the input text component to be updated with the value that is set
> >>>> in the listener method.
> >>>>
> >>>> Thanks for any help or suggestions in advance,
> >>>>
> >>>> Richard
> >>>>
> >>>
> >>
> >
>

Re: [Trinidad] Updating a component value from a selectOneChoice value change listener

Posted by Andrew Robinson <an...@gmail.com>.
Oh, if you queue you own action event you have to use an action
listener since selectOneChoice has no action or actionListener
attributes.

On Wed, Jul 9, 2008 at 9:18 AM, Andrew Robinson
<an...@gmail.com> wrote:
> There is no way to have the selectOneChoice fire an action event, but
> you can hack it by removing the autoSumbit.
>
> <tr:selectOneChoice onchange="click('commandLink')">
> </tr:selectOneChoice>
>
> <tr:commandLink id="commandLink" inlineStyle="display:none;" action="blah" />
>
> Then use the click function to raise the click event on the link. You
> can also use the Trinidad PPR API to manually submit an event for the
> commandLink. Just make sure you use the full clientId of the
> commandLink.
>
> I have had some ideas on enhancing PPR with Trinidad and the ability
> to generate events and wrap events on queuing, but even if ppl. agree
> to the design, it would be a while before such a thing was released.
>
> You could also queue you own action event:
>
> public void onPropertyChange(PropertyChangeEvent evt) {
>  ActionEvent e = new ActionEvent(evt.getSource);
>  e.setPhaseId(PhaseId.INVOKE_APPLICATION);
>  e.queue();
> }
>
> -Andrew
>
> On Wed, Jul 9, 2008 at 6:07 AM, Richard Yee <ri...@gmail.com> wrote:
>> Andrew,
>> Thanks for your help. We are using JSF 1.1 so I don't think the
>> f:setPropertyActionListener solution will work for us. I tried just
>> putting tr:subform around the inputText and now it doesn't update it
>> at all. Perhaps there is a different way to implement my page?
>> The functionality that I am trying to achieve is to use a
>> selectOneChoice component to select a person from a list of persons to
>> edit. Currently, I am using a valueChangeListener in the
>> selectOneChoice to detect when a person is selected and then update
>> the input components with that persons information. This is where I am
>> having the problem. I would like to avoid using the tomahawk solution
>> since the project doesn't currently use tomahawk and I don't really
>> want to add it just for this problem. Is there any way to have the
>> selectOneChoice fire an action event? If I could do that, then I
>> wouldn't need to use the value change listener.
>>
>> Thanks,
>>
>> Richard
>>
>>
>>
>> On Tue, Jul 8, 2008 at 10:37 PM, Andrew Robinson
>> <an...@gmail.com> wrote:
>>> Value change listeners are fired during validation.
>>>
>>> What happens:
>>>
>>> 1) decode
>>> 1a) select one choice decoded - submitted value set
>>> 1b) input text decoded - submitted value set
>>> 2) validation
>>> 2a) select one choice converts submitted value
>>> 2b) select one choice validates value
>>> 2c) select one choice queues value change event (phase = ANY)
>>> 2d) input text converts submitted value
>>> 2e) input text validates value
>>> 2f) input text queues value change event (phase = ANY)
>>> 2g) value change events broadcast
>>> 3) update model
>>> 3a) select one choice updates value
>>> 3b) input text updates value
>>>
>>> As you can see, it is useless to set values in a value change
>>> listeners that have UIInput components updating them. In fact, it is
>>> very dangerous to make any changes during a value change event,
>>> because at that phase, there is absolutely no guarantee that the
>>> updating of the model will ever happen. Therefore if your bean sets a
>>> property and something short circuits the lifecycle, then the
>>> "transaction" is broken.
>>>
>>> I would suggest one of:
>>> 1) use the myfaces tomahawk sandbox valueChangeNotifier that runs
>>> during update, not validation:
>>> http://myfaces.apache.org/sandbox/tlddoc/s/valueChangeNotifier.html
>>> 2) use f:setPropertyActionListener instead of using value change events
>>> 3) use tr:subForm around the controls to make sure that when the
>>> selectOneChoice is submitted, the inputText is not submitted (note
>>> that I don't think that this solution will work for browsers that do
>>> not support AJAX)
>>>
>>> -Andrew
>>>
>>> On Tue, Jul 8, 2008 at 10:14 PM, Richard Yee <ri...@gmail.com> wrote:
>>>> Hi,
>>>> I'm having a problem updating the value of a inputText component from
>>>> the value change listener of a selectOneChoice component.  I have the
>>>> following in my jspx page:
>>>>
>>>>  <f:view>
>>>>    <tr:document title="Index">
>>>>      <trh:body>
>>>>        <tr:form>
>>>>          <tr:selectOneChoice id="memberSelect" value="#{myBacking.selectValue}"
>>>>            valueChangeListener="#{myBacking.changeListener}"
>>>>            autoSubmit="true" >
>>>>            <tr:selectItem label="Item 1" value="1"/>
>>>>            <tr:selectItem label="Item 2" value="2"/>
>>>>            <tr:selectItem label="Item 3" value="3"/>
>>>>          </tr:selectOneChoice>
>>>>          <tr:inputText value="#{myBacking.line2}" label="Line 2:"
>>>>            partialTriggers="memberSelect" id="line2"/>
>>>>
>>>>        </tr:form>
>>>>      </trh:body>
>>>>    </tr:document>
>>>>  </f:view>
>>>>
>>>> My value change listener in my backing bean is
>>>>  public void changeListener(ValueChangeEvent evt) {
>>>>    setLine2("XXXX");  }
>>>> }
>>>> When I run the page, if I only change the value of selectOneChoice,
>>>> then "XXXX" gets populated in the input text box as I expected.
>>>> However, if I type something in the inputText component and then
>>>> change the value of the selectOneChoice, the value that I typed
>>>> remains in the input text box. If I then change the value of the
>>>> select box again, then "XXXX" gets populated in the text box. I'm
>>>> wondering why it takes a second time through the value Change Listener
>>>> for the input text component to be updated with the value that is set
>>>> in the listener method.
>>>>
>>>> Thanks for any help or suggestions in advance,
>>>>
>>>> Richard
>>>>
>>>
>>
>

Re: [Trinidad] Updating a component value from a selectOneChoice value change listener

Posted by Andrew Robinson <an...@gmail.com>.
There is no way to have the selectOneChoice fire an action event, but
you can hack it by removing the autoSumbit.

<tr:selectOneChoice onchange="click('commandLink')">
</tr:selectOneChoice>

<tr:commandLink id="commandLink" inlineStyle="display:none;" action="blah" />

Then use the click function to raise the click event on the link. You
can also use the Trinidad PPR API to manually submit an event for the
commandLink. Just make sure you use the full clientId of the
commandLink.

I have had some ideas on enhancing PPR with Trinidad and the ability
to generate events and wrap events on queuing, but even if ppl. agree
to the design, it would be a while before such a thing was released.

You could also queue you own action event:

public void onPropertyChange(PropertyChangeEvent evt) {
  ActionEvent e = new ActionEvent(evt.getSource);
  e.setPhaseId(PhaseId.INVOKE_APPLICATION);
  e.queue();
}

-Andrew

On Wed, Jul 9, 2008 at 6:07 AM, Richard Yee <ri...@gmail.com> wrote:
> Andrew,
> Thanks for your help. We are using JSF 1.1 so I don't think the
> f:setPropertyActionListener solution will work for us. I tried just
> putting tr:subform around the inputText and now it doesn't update it
> at all. Perhaps there is a different way to implement my page?
> The functionality that I am trying to achieve is to use a
> selectOneChoice component to select a person from a list of persons to
> edit. Currently, I am using a valueChangeListener in the
> selectOneChoice to detect when a person is selected and then update
> the input components with that persons information. This is where I am
> having the problem. I would like to avoid using the tomahawk solution
> since the project doesn't currently use tomahawk and I don't really
> want to add it just for this problem. Is there any way to have the
> selectOneChoice fire an action event? If I could do that, then I
> wouldn't need to use the value change listener.
>
> Thanks,
>
> Richard
>
>
>
> On Tue, Jul 8, 2008 at 10:37 PM, Andrew Robinson
> <an...@gmail.com> wrote:
>> Value change listeners are fired during validation.
>>
>> What happens:
>>
>> 1) decode
>> 1a) select one choice decoded - submitted value set
>> 1b) input text decoded - submitted value set
>> 2) validation
>> 2a) select one choice converts submitted value
>> 2b) select one choice validates value
>> 2c) select one choice queues value change event (phase = ANY)
>> 2d) input text converts submitted value
>> 2e) input text validates value
>> 2f) input text queues value change event (phase = ANY)
>> 2g) value change events broadcast
>> 3) update model
>> 3a) select one choice updates value
>> 3b) input text updates value
>>
>> As you can see, it is useless to set values in a value change
>> listeners that have UIInput components updating them. In fact, it is
>> very dangerous to make any changes during a value change event,
>> because at that phase, there is absolutely no guarantee that the
>> updating of the model will ever happen. Therefore if your bean sets a
>> property and something short circuits the lifecycle, then the
>> "transaction" is broken.
>>
>> I would suggest one of:
>> 1) use the myfaces tomahawk sandbox valueChangeNotifier that runs
>> during update, not validation:
>> http://myfaces.apache.org/sandbox/tlddoc/s/valueChangeNotifier.html
>> 2) use f:setPropertyActionListener instead of using value change events
>> 3) use tr:subForm around the controls to make sure that when the
>> selectOneChoice is submitted, the inputText is not submitted (note
>> that I don't think that this solution will work for browsers that do
>> not support AJAX)
>>
>> -Andrew
>>
>> On Tue, Jul 8, 2008 at 10:14 PM, Richard Yee <ri...@gmail.com> wrote:
>>> Hi,
>>> I'm having a problem updating the value of a inputText component from
>>> the value change listener of a selectOneChoice component.  I have the
>>> following in my jspx page:
>>>
>>>  <f:view>
>>>    <tr:document title="Index">
>>>      <trh:body>
>>>        <tr:form>
>>>          <tr:selectOneChoice id="memberSelect" value="#{myBacking.selectValue}"
>>>            valueChangeListener="#{myBacking.changeListener}"
>>>            autoSubmit="true" >
>>>            <tr:selectItem label="Item 1" value="1"/>
>>>            <tr:selectItem label="Item 2" value="2"/>
>>>            <tr:selectItem label="Item 3" value="3"/>
>>>          </tr:selectOneChoice>
>>>          <tr:inputText value="#{myBacking.line2}" label="Line 2:"
>>>            partialTriggers="memberSelect" id="line2"/>
>>>
>>>        </tr:form>
>>>      </trh:body>
>>>    </tr:document>
>>>  </f:view>
>>>
>>> My value change listener in my backing bean is
>>>  public void changeListener(ValueChangeEvent evt) {
>>>    setLine2("XXXX");  }
>>> }
>>> When I run the page, if I only change the value of selectOneChoice,
>>> then "XXXX" gets populated in the input text box as I expected.
>>> However, if I type something in the inputText component and then
>>> change the value of the selectOneChoice, the value that I typed
>>> remains in the input text box. If I then change the value of the
>>> select box again, then "XXXX" gets populated in the text box. I'm
>>> wondering why it takes a second time through the value Change Listener
>>> for the input text component to be updated with the value that is set
>>> in the listener method.
>>>
>>> Thanks for any help or suggestions in advance,
>>>
>>> Richard
>>>
>>
>

Re: [Trinidad] Updating a component value from a selectOneChoice value change listener

Posted by Mike Kienenberger <mk...@gmail.com>.
In the better-late-than-never department, you can use Tomahawk's
t:updateActionListener tag to get the same functionality that
f:setPropertyActionListener provides.  If you were using facelets
(which I'm guessing you are not), you could also use the built-in JSF
1.1 facelets f:setPropertyActionListener without JSF 1.2.

On 7/9/08, Richard Yee <ri...@gmail.com> wrote:
> Andrew,
>  Thanks for your help. We are using JSF 1.1 so I don't think the
>  f:setPropertyActionListener solution will work for us. I tried just
>  putting tr:subform around the inputText and now it doesn't update it
>  at all. Perhaps there is a different way to implement my page?
>  The functionality that I am trying to achieve is to use a
>  selectOneChoice component to select a person from a list of persons to
>  edit. Currently, I am using a valueChangeListener in the
>  selectOneChoice to detect when a person is selected and then update
>  the input components with that persons information. This is where I am
>  having the problem. I would like to avoid using the tomahawk solution
>  since the project doesn't currently use tomahawk and I don't really
>  want to add it just for this problem. Is there any way to have the
>  selectOneChoice fire an action event? If I could do that, then I
>  wouldn't need to use the value change listener.
>
>  Thanks,
>
>
>  Richard
>
>
>
>
>  On Tue, Jul 8, 2008 at 10:37 PM, Andrew Robinson
>  <an...@gmail.com> wrote:
>  > Value change listeners are fired during validation.
>  >
>  > What happens:
>  >
>  > 1) decode
>  > 1a) select one choice decoded - submitted value set
>  > 1b) input text decoded - submitted value set
>  > 2) validation
>  > 2a) select one choice converts submitted value
>  > 2b) select one choice validates value
>  > 2c) select one choice queues value change event (phase = ANY)
>  > 2d) input text converts submitted value
>  > 2e) input text validates value
>  > 2f) input text queues value change event (phase = ANY)
>  > 2g) value change events broadcast
>  > 3) update model
>  > 3a) select one choice updates value
>  > 3b) input text updates value
>  >
>  > As you can see, it is useless to set values in a value change
>  > listeners that have UIInput components updating them. In fact, it is
>  > very dangerous to make any changes during a value change event,
>  > because at that phase, there is absolutely no guarantee that the
>  > updating of the model will ever happen. Therefore if your bean sets a
>  > property and something short circuits the lifecycle, then the
>  > "transaction" is broken.
>  >
>  > I would suggest one of:
>  > 1) use the myfaces tomahawk sandbox valueChangeNotifier that runs
>  > during update, not validation:
>  > http://myfaces.apache.org/sandbox/tlddoc/s/valueChangeNotifier.html
>  > 2) use f:setPropertyActionListener instead of using value change events
>  > 3) use tr:subForm around the controls to make sure that when the
>  > selectOneChoice is submitted, the inputText is not submitted (note
>  > that I don't think that this solution will work for browsers that do
>  > not support AJAX)
>  >
>  > -Andrew
>  >
>  > On Tue, Jul 8, 2008 at 10:14 PM, Richard Yee <ri...@gmail.com> wrote:
>  >> Hi,
>  >> I'm having a problem updating the value of a inputText component from
>  >> the value change listener of a selectOneChoice component.  I have the
>  >> following in my jspx page:
>  >>
>  >>  <f:view>
>  >>    <tr:document title="Index">
>  >>      <trh:body>
>  >>        <tr:form>
>  >>          <tr:selectOneChoice id="memberSelect" value="#{myBacking.selectValue}"
>  >>            valueChangeListener="#{myBacking.changeListener}"
>  >>            autoSubmit="true" >
>  >>            <tr:selectItem label="Item 1" value="1"/>
>  >>            <tr:selectItem label="Item 2" value="2"/>
>  >>            <tr:selectItem label="Item 3" value="3"/>
>  >>          </tr:selectOneChoice>
>  >>          <tr:inputText value="#{myBacking.line2}" label="Line 2:"
>  >>            partialTriggers="memberSelect" id="line2"/>
>  >>
>  >>        </tr:form>
>  >>      </trh:body>
>  >>    </tr:document>
>  >>  </f:view>
>  >>
>  >> My value change listener in my backing bean is
>  >>  public void changeListener(ValueChangeEvent evt) {
>  >>    setLine2("XXXX");  }
>  >> }
>  >> When I run the page, if I only change the value of selectOneChoice,
>  >> then "XXXX" gets populated in the input text box as I expected.
>  >> However, if I type something in the inputText component and then
>  >> change the value of the selectOneChoice, the value that I typed
>  >> remains in the input text box. If I then change the value of the
>  >> select box again, then "XXXX" gets populated in the text box. I'm
>  >> wondering why it takes a second time through the value Change Listener
>  >> for the input text component to be updated with the value that is set
>  >> in the listener method.
>  >>
>  >> Thanks for any help or suggestions in advance,
>  >>
>  >> Richard
>  >>
>  >
>

Re: [Trinidad] Updating a component value from a selectOneChoice value change listener

Posted by Richard Yee <ri...@gmail.com>.
Andrew,
Thanks for your help. We are using JSF 1.1 so I don't think the
f:setPropertyActionListener solution will work for us. I tried just
putting tr:subform around the inputText and now it doesn't update it
at all. Perhaps there is a different way to implement my page?
The functionality that I am trying to achieve is to use a
selectOneChoice component to select a person from a list of persons to
edit. Currently, I am using a valueChangeListener in the
selectOneChoice to detect when a person is selected and then update
the input components with that persons information. This is where I am
having the problem. I would like to avoid using the tomahawk solution
since the project doesn't currently use tomahawk and I don't really
want to add it just for this problem. Is there any way to have the
selectOneChoice fire an action event? If I could do that, then I
wouldn't need to use the value change listener.

Thanks,

Richard



On Tue, Jul 8, 2008 at 10:37 PM, Andrew Robinson
<an...@gmail.com> wrote:
> Value change listeners are fired during validation.
>
> What happens:
>
> 1) decode
> 1a) select one choice decoded - submitted value set
> 1b) input text decoded - submitted value set
> 2) validation
> 2a) select one choice converts submitted value
> 2b) select one choice validates value
> 2c) select one choice queues value change event (phase = ANY)
> 2d) input text converts submitted value
> 2e) input text validates value
> 2f) input text queues value change event (phase = ANY)
> 2g) value change events broadcast
> 3) update model
> 3a) select one choice updates value
> 3b) input text updates value
>
> As you can see, it is useless to set values in a value change
> listeners that have UIInput components updating them. In fact, it is
> very dangerous to make any changes during a value change event,
> because at that phase, there is absolutely no guarantee that the
> updating of the model will ever happen. Therefore if your bean sets a
> property and something short circuits the lifecycle, then the
> "transaction" is broken.
>
> I would suggest one of:
> 1) use the myfaces tomahawk sandbox valueChangeNotifier that runs
> during update, not validation:
> http://myfaces.apache.org/sandbox/tlddoc/s/valueChangeNotifier.html
> 2) use f:setPropertyActionListener instead of using value change events
> 3) use tr:subForm around the controls to make sure that when the
> selectOneChoice is submitted, the inputText is not submitted (note
> that I don't think that this solution will work for browsers that do
> not support AJAX)
>
> -Andrew
>
> On Tue, Jul 8, 2008 at 10:14 PM, Richard Yee <ri...@gmail.com> wrote:
>> Hi,
>> I'm having a problem updating the value of a inputText component from
>> the value change listener of a selectOneChoice component.  I have the
>> following in my jspx page:
>>
>>  <f:view>
>>    <tr:document title="Index">
>>      <trh:body>
>>        <tr:form>
>>          <tr:selectOneChoice id="memberSelect" value="#{myBacking.selectValue}"
>>            valueChangeListener="#{myBacking.changeListener}"
>>            autoSubmit="true" >
>>            <tr:selectItem label="Item 1" value="1"/>
>>            <tr:selectItem label="Item 2" value="2"/>
>>            <tr:selectItem label="Item 3" value="3"/>
>>          </tr:selectOneChoice>
>>          <tr:inputText value="#{myBacking.line2}" label="Line 2:"
>>            partialTriggers="memberSelect" id="line2"/>
>>
>>        </tr:form>
>>      </trh:body>
>>    </tr:document>
>>  </f:view>
>>
>> My value change listener in my backing bean is
>>  public void changeListener(ValueChangeEvent evt) {
>>    setLine2("XXXX");  }
>> }
>> When I run the page, if I only change the value of selectOneChoice,
>> then "XXXX" gets populated in the input text box as I expected.
>> However, if I type something in the inputText component and then
>> change the value of the selectOneChoice, the value that I typed
>> remains in the input text box. If I then change the value of the
>> select box again, then "XXXX" gets populated in the text box. I'm
>> wondering why it takes a second time through the value Change Listener
>> for the input text component to be updated with the value that is set
>> in the listener method.
>>
>> Thanks for any help or suggestions in advance,
>>
>> Richard
>>
>

Re: [Trinidad] Updating a component value from a selectOneChoice value change listener

Posted by Andrew Robinson <an...@gmail.com>.
Value change listeners are fired during validation.

What happens:

1) decode
1a) select one choice decoded - submitted value set
1b) input text decoded - submitted value set
2) validation
2a) select one choice converts submitted value
2b) select one choice validates value
2c) select one choice queues value change event (phase = ANY)
2d) input text converts submitted value
2e) input text validates value
2f) input text queues value change event (phase = ANY)
2g) value change events broadcast
3) update model
3a) select one choice updates value
3b) input text updates value

As you can see, it is useless to set values in a value change
listeners that have UIInput components updating them. In fact, it is
very dangerous to make any changes during a value change event,
because at that phase, there is absolutely no guarantee that the
updating of the model will ever happen. Therefore if your bean sets a
property and something short circuits the lifecycle, then the
"transaction" is broken.

I would suggest one of:
1) use the myfaces tomahawk sandbox valueChangeNotifier that runs
during update, not validation:
http://myfaces.apache.org/sandbox/tlddoc/s/valueChangeNotifier.html
2) use f:setPropertyActionListener instead of using value change events
3) use tr:subForm around the controls to make sure that when the
selectOneChoice is submitted, the inputText is not submitted (note
that I don't think that this solution will work for browsers that do
not support AJAX)

-Andrew

On Tue, Jul 8, 2008 at 10:14 PM, Richard Yee <ri...@gmail.com> wrote:
> Hi,
> I'm having a problem updating the value of a inputText component from
> the value change listener of a selectOneChoice component.  I have the
> following in my jspx page:
>
>  <f:view>
>    <tr:document title="Index">
>      <trh:body>
>        <tr:form>
>          <tr:selectOneChoice id="memberSelect" value="#{myBacking.selectValue}"
>            valueChangeListener="#{myBacking.changeListener}"
>            autoSubmit="true" >
>            <tr:selectItem label="Item 1" value="1"/>
>            <tr:selectItem label="Item 2" value="2"/>
>            <tr:selectItem label="Item 3" value="3"/>
>          </tr:selectOneChoice>
>          <tr:inputText value="#{myBacking.line2}" label="Line 2:"
>            partialTriggers="memberSelect" id="line2"/>
>
>        </tr:form>
>      </trh:body>
>    </tr:document>
>  </f:view>
>
> My value change listener in my backing bean is
>  public void changeListener(ValueChangeEvent evt) {
>    setLine2("XXXX");  }
> }
> When I run the page, if I only change the value of selectOneChoice,
> then "XXXX" gets populated in the input text box as I expected.
> However, if I type something in the inputText component and then
> change the value of the selectOneChoice, the value that I typed
> remains in the input text box. If I then change the value of the
> select box again, then "XXXX" gets populated in the text box. I'm
> wondering why it takes a second time through the value Change Listener
> for the input text component to be updated with the value that is set
> in the listener method.
>
> Thanks for any help or suggestions in advance,
>
> Richard
>