Hi Volker, I asked a wrong question in my previous post. Sorry.
Your code works fine. It cleans the multiple selections "internally". I observe a problem: After a user submits his/her multiple selections, which is an action (instead of an action listener), I display the files that he/she has selected. Then, I close the browser. While the server is still running, I run the same application again. And I see the previously selected items are highlighted in the list box on my screen. What should I do to resolve this problem? I mean how to erase the selections visually after the 'action' takes place? See <h:commandButton value="View Data Files ..." type="submit" style="width: 180px" action="#{fileManagementBean.displaySelectedFiles}"/> The "type' attribute in the commandButton has to have a value "submit". The cleaning multiple selections is easier. the command button that has an action listener to invoke the clear( ActionEvent e ) method can have a 'type' attibute with its value being "reset" to clean the previous selections visually. --Caroline --- Volker Weber <[EMAIL PROTECTED]> 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! Mail - PC Magazine Editors' Choice 2005 http://mail.yahoo.com