You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Caroline Jen <ji...@yahoo.com> on 2005/10/13 15:05:28 UTC

Re: UISelectMany. Millions of Thanks for Your Guidance, Mr. Weber.

Hi Volker,

     This morning, I followed and tested the example
that you provided to render a list box into the
browser using a UISelectMany.  It was a success.

     I had not found much, either in books or on the
internet, about using UI components.  Therefore, I had
had a very tough time.  Other advices (supply a List
and return a String[]) I had received were good; but,
I had been aware of that approach long time ago. 
Thanks God and you that I finally see the light after
spending days in dark.

     I am going to try your way of clean multiple
selections and your way of submitting multiple
selections right away.

     By the way, where do I find documentations that
illustrate how to use UIs?

-Caroline

--- Volker Weber <us...@weber-oldenburg.de>
wrote:

> Hi Caroline,
> 
> 
> 
> Caroline Jen wrote:
> ...
> > Meanwhile, would you mind advising:
> > 
> 
> You want to clear the selected Items?
> 
> just clear or null the field in the bean.
> public void clear(ActionEvent e)
> {
>   FacesContext facesContext =
>       FacesContext.getCurrentInstance();
>   ValueBinding vb =
> e.getComponent().getValueBinding();
>   if (vb != null) {
>     vb.setValue(facesContext, null);
>   }
> }
> 
> 
> 
> > 1. How do I deliver each element of the Object[]
> > selectedItems into this method:
> > 
> > public void clear(ActionEvent e) 
> > {
> >     FacesContext facesContext =
> > FacesContext.getCurrentInstance();
> >     UIViewRoot uiViewRoot =
> > facesContext.getViewRoot();
> > 
> >     // Here, I want to iterating through the
> Object[]
> >     if (selectedItems[i] instanceof
> > EditableValueHolder)
> >     {
> 
> this can never happen, selectedItems[i] is not an
> instance of
> EditableValueHolder !
> selectedItems[i] is the first argument of SelectItem
> constructor:
> String in my example.
> 
> >     EditableValueHolder evh =
> (EditableValueHolder)
> > selectedItems[i];
> >     evh.setSubmittedValue(null);
> 
> This has no effect in application phase.
> just setting a variable to null and throwing away
> afterwards.
> 
> >     } 
> > }
> > 
> > The code snippet above is a draft.  I am uncertain
> if
> > I am doing it right.
> > 
> 
> 
> 
> > 2. The multiple selections made by user are in an
> > Object array (i.e. Object[] selectedItems).  How
> do I
> > retrieve the values from this Object array (I
> think
> 
> Just fetch them from your bean or via ValueBinding
> from your Component.
> 
> > that the values retrieved will be a String[] if I
> am
> > not terribly wrong.) to be sent to the database?
> 
> The type is the array type of the objects used to
> create the
> selectItems, in my example Strings.
> 
> I attached updated TestBean.java and test.jsp with
> examples.
> 
> Regards
> Volker Weber
> -- 
> Don't answer to From: address!
> Mail to this account are droped if not recieved via
> mailinglist.
> To contact me direct create the mail address by
> concatenating my forename to my senders domain.
> > package org.apache.myfaces.examples;
> 
> import javax.faces.component.UISelectMany;
> import javax.faces.component.UISelectItems;
> import javax.faces.model.SelectItem;
> import javax.faces.event.ActionEvent;
> import javax.faces.context.FacesContext;
> import javax.faces.el.ValueBinding;
> import java.util.List;
> import java.util.ArrayList;
> 
> public class TestBean {
> 
>   private UISelectMany selectMany;
> 
>   private Object[] selectedItems;
> 
>   public TestBean() {
>     selectMany = new UISelectMany();
>     selectMany.setId("selectMany");
> 
>     UISelectItems items = new UISelectItems();
>     items.setId("selectManyItems");
>     items.setValue(createSelectItems());
> 
>     selectMany.getChildren().add(items);
>   }
> 
>   private Object createSelectItems() {
>     List items = new ArrayList();
>     for (int i = 0; i < 10; i++){
>       items.add(new SelectItem("item" + i, "Item No.
> " + i));
>     }
>     return items;
>   }
> 
>   public UISelectMany getSelectMany() {
>     return selectMany;
>   }
> 
>   public void setSelectMany(UISelectMany selectMany)
> {
>     this.selectMany = selectMany;
>   }
> 
>   public Object[] getSelectedItems() {
>     return selectedItems;
>   }
> 
>   public void setSelectedItems(Object[]
> selectedItems) {
>     this.selectedItems = selectedItems;
>   }
> 
>   public void clear(ActionEvent e) {
> 
>     selectedItems = null;
> 
> // or if no direct access possible
> //    FacesContext facesContext =
> //        FacesContext.getCurrentInstance();
> //    ValueBinding vb =
> e.getComponent().getValueBinding("value");
> //    if (vb != null) {
> //      vb.setValue(facesContext, null);
> //    }
> 
> // ! we have to clear itemsDisplay here also !
> // otherwise it holds his value until next submit
> click.    
>     itemsDisplay = null;
>   }
> 
>   private String itemsDisplay;
> 
>   public void submit(ActionEvent e){
>     Object[] items;
> 
>     items = selectedItems;
> 
> // or if no direct access possible
> //    FacesContext facesContext =
> //        FacesContext.getCurrentInstance();
> //    ValueBinding vb =
> e.getComponent().getValueBinding("value");
> //    if (vb != null) {
> //      items = vb.getValue(facesContext);
> //    }
> 
>     if (items == null || items.length == 0) {
>       itemsDisplay = "No items selected!";
>     } else {
>       StringBuffer sb = new StringBuffer("Selected
> Items: ");
>       for (int i = 0; i < items.length; i++) {
>         sb.append(items[i]);
>         sb.append("; ");
>       }
>       itemsDisplay = sb.toString();
>     }
>   }
> 
>   public String getItemsDisplay() {
>     return itemsDisplay;
>   }
> }
> > <%@ page
> import="org.apache.myfaces.examples.TestBean"%>
> <%@ taglib uri="http://java.sun.com/jsf/html"
> prefix="h"%>
> <%@ taglib uri="http://java.sun.com/jsf/core"
> prefix="f"%>
> 
> <%
>   Object testbean =
> pageContext.getAttribute("TestBean",
> PageContext.SESSION_SCOPE);
>   if (testbean == null) {
>     pageContext.setAttribute("TestBean", new
> TestBean(), PageContext.SESSION_SCOPE);
>   }
> %>
> 
> <html>
> <body>
> <f:view>
>   <h:form>
> 
>     <h:selectManyListbox id="selectMany"
>         binding="#{TestBean.selectMany}"
>         value="#{TestBean.selectedItems}" />
> 
>     <br>
>     <h:commandButton value="Submit"
> actionListener="#{TestBean.submit}"/>
>     <h:commandButton value="Clear"
> actionListener="#{TestBean.clear}"/>
>     <br>
>     <br>
>     <h:outputText value="#{TestBean.itemsDisplay}"/>
> 
>   </h:form>
> </f:view>
> </body>
> </html>



		
__________________________________ 
Yahoo! Music Unlimited 
Access over 1 million songs. Try it free.
http://music.yahoo.com/unlimited/