Hi,

Caroline Jen wrote:
> 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

Use the same code as in clear ActionListener, or invoke the method, to
clear the List.


> 
>                                               <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.

a reset button dosen't clear a selection, just reset the whole form
content to initial state.

> 
> --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
> 

-- 
-------------------------------------------------------------------------
    Volker Weber    Dietrichsweg 38a     26127 Oldenburg     Germany
    MAILTO:[EMAIL PROTECTED]   HTTP://www.weber-oldenburg.de

Reply via email to