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