Andrew, Thanks. That worked great. -Richard
On Wed, Jul 9, 2008 at 9:40 AM, Andrew Robinson <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 >>> <[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 >>> >>>> >>> >>> >>> >> >>> > >>> >> >

