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 <[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 > >> > > >

