With the risk of stating the obvious: Have you taken a look at: http://myfaces.apache.org/sandbox/selectManyPicklist.html It does the trick for me perfectly!
With regards, Marco -----Original Message----- From: monkeyden [mailto:[EMAIL PROTECTED] Sent: donderdag 12 april 2007 4:45 To: [EMAIL PROTECTED] Subject: Re: Programatically updating the model Mike Kienenberger wrote: > > Are you physically moving with javascript the values 1,2,3 over to the > other html element form data? > I'm physically moving the values using JavaScript. Mike Kienenberger wrote: > > Or when you submit the form, are you submitting values 1,2,3 for List > A, submitting no values for List B, and executing a move action (or > action listener)? This is what would normally happen if you had two > SelectMany components and a button on a page. > I assume you're referring to submission when the Add/Remove buttons are clicked. For better or worse (most likely worse), everything is client side until the form is submitted. The Direct-to-DOM feature of ICEFaces would be great for this if list A didnt potentially have 400+ items. This absolutely kills performance. Mike Kienenberger wrote: > > The validation for List B should happen when List B still has no > elements. Maybe validation is failing because you told it that List B > requires a value? > I have required="false" for the component. In fact, here is the code: List A <ice:selectManyListbox id="availableLocations" required="false" size="11" styleClass="inputText" style="width:200px" ondblclick="NEMAdd();return false;" immediate="true"> <f:selectItems value="#{advancedSearchAction.availableTowns}" /> </ice:selectManyListbox> Add Button <ice:commandButton value="#{messages['propertysearch.button.add']}" onclick="addSelectedOptions('advancedPropertySearch:advPropTabSet:availa bleLocations', 'advancedPropertySearch:advPropTabSet:userLocations');return false;" /> Remove Button <ice:commandButton value="#{messages['propertysearch.button.remove']}" onclick="removeSelectedOptions('advancedPropertySearch:advPropTabSet:use rLocations', 'advancedPropertySearch:advPropTabSet:availableLocations');return false;" /> List B <ice:selectManyListbox immediate="true" id="userLocations" size="11" styleClass="inputText" style="width:200px" required="false" value="#{advancedSearchAction.submittedTowns}" ondblclick="removeSelectedOptions('advancedPropertySearch:advPropTabSet: userLocations', 'advancedPropertySearch:advPropTabSet:availableLocations');return false;"> <f:selectItems value="#{advancedSearchAction.selectedTowns}" /> </ice:selectManyListbox> And, last but not least, the button which submits: <ice:commandButton id="searchNowA" onclick="processLocations();selectAll('advancedPropertySearch:advPropTab Set:userLocations', 0);selectAll('advancedPropertySearch:advPropTabSet:availableLocations', 0);" value="#{messages['propertysearch.label.button.searchNow']}" action="#{advancedSearchAction.search}" /> Mike Kienenberger wrote: > > Are you sure that validation isn't failing for some other reason than > the one you think? Put some messages tags on your page. > I'm positive. Mike Kienenberger wrote: > > As for subclassing, you can add things like this to your faces-config.xml > file. > > <component> > > <component-type>com.xyz.jsf.component.PropertyComparator</component-type > > > <component-class>com.xyz.jsf.component.PropertyComparator</component-cla ss> > </component> > > <render-kit> > <render-kit-id>HTML_BASIC</render-kit-id> > > <renderer> > <component-family>org.apache.myfaces.Radio</component-family> > <renderer-type>org.apache.myfaces.Radio</renderer-type> > > <renderer-class>com.xyz.jsf.component.ExtendedHtmlRadioRenderer</rendere r-class> > </renderer> > > </render-kit> > > I know for sure that overriding a renderer works this easily. > Doesn't this setting extend this method for all occurances of "org.apache.myfaces.Radio" in your application? Mike Kienenberger wrote: > > I don't know for sure that overriding a component works in standard > JSF/JSP. It'd be easy to test. > > I know that in Facelets, you can trivially redefine a new tag name > with a different component and renderer. > > <tag> > <tag-name>dataTable</tag-name> > <component> > > <component-type>org.apache.myfaces.HtmlDataTable</component-type> > <renderer-type>org.apache.myfaces.Table</renderer-type> > </component> > </tag> > > Worse case, you might need to also define a new tld/jsp TagHandler. > On 4/11/07, monkeyden <[EMAIL PROTECTED]> wrote: > > Here is why I believe I need to do this...correct me if Im wrong. > > I have two lists (A and B). List A has values 1,2,3,4,5 . List B has > nothing. I move the values 1,2,3 over to list B and submit. Because the > values 1,2,3 are not a subset of the original <f:selectItems> used to > populate list B, the submitted values are invalid. > > I can't get to the "update model phase" because the component has already > failed validation in the previous phase. I would like to know about > extending UISelect, mainly how to tell JSF to use my subclass. I've never > extended JSF in this manner. > > Thanks for the response. > > > Mike Kienenberger wrote: > > > > Would it be easier for you to override the following method in > > UISelect in your own component subclass? > > > > protected void validateValue(FacesContext context, Object > convertedValue) > > > > I'm actually kind of confused why you'd even need to do this. > > > > Your source select many component has a list of items, and any items > > you select in it should be valid. The same should be true for your > > destination component. > > > > You would update the lists after the update model phase (invoke > > action) and before rendering a new response, so there shouldn't be any > > trickery necessary. > > > > I do something similar with two UIData components and two lists. My > > "picker" only works for one item at a time, but should be pretty much > > the same other than that. > > > > > > On 4/11/07, monkeyden <[EMAIL PROTECTED]> wrote: > >> > >> I'm implementing a "mover box control", which consists of two select > >> boxes > >> and two mover buttons (Add/Remove). > >> In the valueChangeListener method, I need to programmatically take the > >> submitted values and create SelectItems out of them. In order to trick > >> JSF > >> into thinking that they are valid, I'd like to update the model. This > is > >> done to get around the problem of submitted values not being valid when > >> they > >> are not a subset of the original list. I've tried several of the > methods > >> on > >> UIInput and UIViewRoot but none seem to be working correctly. I know > >> Tomahawk has something like this in the sandbox. We're using ICEFaces > >> but I > >> think this is a standard JSF question. > >> > >> Thanks for the guidance > >> -- > >> View this message in context: > >> > http://www.nabble.com/Programatically-updating-the-model-tf3562422.html# a9949895 > >> Sent from the MyFaces - Users mailing list archive at Nabble.com. > >> > >> > > > > > > -- > View this message in context: > http://www.nabble.com/Programatically-updating-the-model-tf3562422.html# a9951617 > Sent from the MyFaces - Users mailing list archive at Nabble.com. > > -- View this message in context: http://www.nabble.com/Programatically-updating-the-model-tf3562422.html# a9952049 Sent from the MyFaces - Users mailing list archive at Nabble.com. ------------------------------------------------------------------------------ Notice: This e-mail message, together with any attachments, contains information of Merck & Co., Inc. (One Merck Drive, Whitehouse Station, New Jersey, USA 08889), and/or its affiliates (which may be known outside the United States as Merck Frosst, Merck Sharp & Dohme or MSD and in Japan, as Banyu - direct contact information for affiliates is available at http://www.merck.com/contact/contacts.html) that may be confidential, proprietary copyrighted and/or legally privileged. It is intended solely for the use of the individual or entity named on this message. If you are not the intended recipient, and have received this message in error, please notify us immediately by reply e-mail and then delete it from your system. ------------------------------------------------------------------------------

