Hello,
I want to update dynamically a part of my page that take account of the selected values of a pickList.
Thus I am using a function plugged to @onadditems and @onremoveitems attributes.
When the function is called, the selected values of the pickList contains the previous selected values.
Is it the good to perform what I want to do ?
Here is a simple example to reproduce the issue
<h:form id="frm"> <a4j:jsFunction name="processPickList" execute="pick" /> <rich:pickList id="pick" listWidth="250px" listHeight="100px" styleClass="pointerCursor" sourceCaption="Available Numbers" targetCaption="Selected Ones" onadditems="processPickList()" onremoveitems="processPickList()" value="#{pickListBean.selectedNumbers}" > <f:selectItems value="#{pickListBean.availableNumbers}" var="num" itemValue="#{num}" itemLabel="#{num}"/> </rich:pickList> <a4j:outputPanel id="autoRendered" ajaxRendered="true"> <rich:dataTable value="#{pickListBean.selectedNumbers}" var="n" noDataLabel="NoSelection" > <rich:column > <f:facet name="header">Selected Numbers</f:facet> <h:outputText value="#{n}" /> </rich:column> </rich:dataTable> </a4j:outputPanel> </h:form>
package fr.alladin.common.web.bean.module.test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.faces.bean.ManagedBean; @ManagedBean public class PickListBean { public List<Integer> availableNumbers = new ArrayList<Integer>(); public List<Integer> selectedNumbers = new ArrayList<Integer>(); public PickListBean() { } public List<Integer> getAvailableNumbers() { if (availableNumbers.isEmpty()) { availableNumbers.addAll(Arrays.asList(new Integer[] { 1, 2, 3, 4, 5 })); } return availableNumbers; } public void setAvailableNumbers(List<Integer> availableNumbers) { this.availableNumbers = availableNumbers; } public List<Integer> getSelectedNumbers() { return selectedNumbers; } public void setSelectedNumbers(List<Integer> selectedNumbers) { this.selectedNumbers = selectedNumbers; } }
Hi,
use the "change" event instead, the add/remove items are meant for client side handling.