I tried the partialSubmit attribute in ICEFaces (server-side control with Ajax updates to the client), which works nicely for text fields, radios, checkboxes and small to medium sized select lists. Mine were too large (400-500 items) so it dragged. It works exactly as I would expect (only sending updates for components to the client). The problem is the "update" for this one component is significant. It actually send the <select> tag and 400-500 <option> tags.
Mike Kienenberger wrote: > > The sandbox component doesn't do what you want anyway. It's all > server-side, not client-side. > > On 4/12/07, monkeyden <[EMAIL PROTECTED]> wrote: >> >> >> monkeyden wrote: >> > >> > "I know Tomahawk has something like this in the sandbox. We're using >> > ICEFaces but I think this is a standard JSF question." >> > >> >> I'm not switching for one control. I've programmatically updated the >> backing bean's List<SelectItem>. All I need to know is how to tell JSF >> to >> update the values, for this component, from the backing bean. I want to >> do >> this within a value change listener method. >> >> >> Beelen, Marco wrote: >> > >> > 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. >> > >> > >> ------------------------------------------------------------------------------ >> > >> > >> >> -- >> View this message in context: >> http://www.nabble.com/Programatically-updating-the-model-tf3562422.html#a9959591 >> 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#a9960883 Sent from the MyFaces - Users mailing list archive at Nabble.com.

