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
<[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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
>> <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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
>>>>
>>>
>>
>