[richfaces-issues] [JBoss JIRA] (RF-12053) Picklist : valueChangeListener does not work when user moves items between left and right sides
Andrew Cheung (JIRA)
jira-events at lists.jboss.org
Thu Mar 15 17:08:47 EDT 2012
[ https://issues.jboss.org/browse/RF-12053?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andrew Cheung closed RF-12053.
------------------------------
Resolution: Rejected
Not a bug. It was due to the user's misunderstanding of the behaviour.
> Picklist : valueChangeListener does not work when user moves items between left and right sides
> -----------------------------------------------------------------------------------------------
>
> Key: RF-12053
> URL: https://issues.jboss.org/browse/RF-12053
> Project: RichFaces
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: component-selects
> Affects Versions: 3.3.3.Final
> Environment: RichFaces 3.3.3Final
> JBOSS EPP5.1.1
> browsers : Firefox 10.0.2 and IE8
> Reporter: Andrew Cheung
> Labels: picklist, valueChangeListener
>
> The valueChangeListener for picklist does not fire when a user moves items between the left and right hand sides of the picklist.
> Code as follows:
> index.xhtml:
> <a4j:form id="ModifyUserForm">
>
> <rich:pickList id="pkAuxOffices" sourceListWidth="377px" targetListWidth="377px" showButtonsLabel="false" copyAllVisible="false" removeAllVisible="false" value="#{myBean.selectedAuxOffices}" converter="sibcvtr" valueChangeListener="markAuxOfficesModified" >
> <f:selectItems value="#{myBean.auxOffices}"/>
> </rich:pickList>
> <h:commandButton styleClass="btn-go" id="btnSubmit" action="#{myBean.modifyUser}" value="Go" />
> </a4j:form>
> -----------------
> In the bean (myBean.java):
> private List<SIBean> selectedAuxOffices = null; //for picklist right hand side
> private ArrayList<SelectItem> auxOffices = null;
> public List<SIBean> getSelectedAuxOffices() {
> return selectedAuxOffices;
> }
> public void setSelectedAuxOffices(List<SIBean> selectedAuxOffices) {
> this.selectedAuxOffices = selectedAuxOffices;
> }
>
> public ArrayList<SelectItem> getAuxOffices() {
> return auxOffices;
> }
> public void setAuxOffices(ArrayList<SelectItem> auxOffices) {
> this.auxOffices = auxOffices;
> }
> public UA() throws java.lang.Exception {
> initializeMyBean();
>
>
> }
> private void initializeMyBean() throws java.lang.Exception {
> ....
> auxOffices = demo.createSIList(...); //retrieves the list of available offices from the database
>
> //get selected attribute values on the right side of the picklist
> List<SIBean> userSelectedAuxOffices = createSIBeanList(...); //retrieves the list of selected offices from the database
> if (selectedAuxOffices == null) {
> selectedAuxOffices = new ArrayList<SIBean>();
> }
>
> if (auxOffices == null) {
> auxOffices = new ArrayList<SelectItem>();
> }
>
> selectedAuxOffices = userSelectedAuxOffices;
> }
> public void markOfficesModified(ValueChangeEvent event) {
> ArrayList<SIBean> auxOfficesBeanChanged = (ArrayList<SIBean>)event.getNewValue();
> String[] auxOfficesChanged = new String[auxOfficesBeanChanged.size()];
> int i = 0;
> for (SIBean sib : auxOfficesBeanChanged) {
> auxOfficesChanged[i] = sib.getValue();
> _Logger.error("DEBUGXXX : auxOfficesChanged = " + auxOfficesChanged[i]);
> i++;
> }
>
> }
>
> -------------------
> Code in SIBean.java :
>
> import org.apache.commons.lang.builder.EqualsBuilder;
> import org.apache.log4j.Logger;
>
>
> public class SIBean {
>
> private String label;
> private String value;
>
> public SIBean(String newlabel, String newvalue){
> label = newlabel;
> value = newvalue;
> }
> public SIBean(){
> label = "";
> value = "";
> }
>
> public String getLabel() {
> return label;
> }
> public void setLabel(String label) {
> this.label = label;
> }
> public String getValue() {
> return value;
> }
> public void setValue(String value) {
> this.value = value;
> }
>
> public boolean equals(Object obj) {
>
> if (obj == null)
> return false;
> if (obj == this)
> return true;
> if (obj.getClass() != getClass())
> return false;
>
> SIBean rib = (SIBean) obj;
>
> return new EqualsBuilder().
> append(value, rib.value).
> isEquals();
>
>
> }
>
> }
> --------------
> Code in converter :
> import javax.faces.component.UIComponent;
> import javax.faces.context.FacesContext;
> import javax.faces.convert.Converter;
>
> import org.apache.log4j.Logger;
>
>
> import demo.SIBean;
>
> public class SIBeanConverter implements Converter {
>
>
> @Override
> public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
> // TODO Auto-generated method stub
>
>
> int index = arg2.indexOf(':');
> if (index == -1) {
> return new SIBean(arg2,arg2); //workaround for index out of range issue (arg2 should contain "label:value"; but sometimes it only contain "value" due to the bug reported in JIRA)
> }
> else {
> return new SIBean(arg2.substring(0, index), arg2.substring(index + 1));
> }
>
>
> }
>
> @Override
> public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
> // TODO Auto-generated method stub
> if (arg2 instanceof SIBean) {
> return ((SIBean)arg2).getLabel() + ":" + ((SIBean)arg2).getValue();
> }
> else {
> return arg2.toString();
> }
> }
>
> }
> ----------------------
> faces-config.xml :
> <converter>
> <converter-id>sibcvtr</converter-id>
> <converter-class>demo.SIBeanConverter</converter-class>
> </converter>
> <managed-bean>
> <description>myBean</description>
> <managed-bean-name>myBean</managed-bean-name>
> <managed-bean-class>demo.myBean</managed-bean-class>
> <managed-bean-scope>session</managed-bean-scope>
> </managed-bean>
> -------------------------
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the richfaces-issues
mailing list