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/