2 Replies Latest reply on Jan 7, 2008 2:13 PM by Miguel Angel Ramon

    error in getting elements from "targetValue" in listShuttle

    Miguel Angel Ramon Newbie

      my list asociated to "listShuttle" no set the elements selected in the page.

      using List List instead List (deleting converter="converter.AuctionType"),
      the component works fine.


      what is the problem? the converter is wrong?
      -----------

      <ui:composition xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:rich="http://richfaces.org/rich"
      xmlns:c="http://java.sun.com/jstl/core">

      <a4j:keepAlive beanName="programBean" ajaxOnly="false"/>
      <a4j:form>
      <rich:toolBar id="toolBar" itemSeparator="line" height="28px">
      <c:forEach items="#{programBean.auctionTypesSld}" var="item">
      <h:panelGroup>
      <h:outputLink value="#">
      <h:outputText value="#{item.acutionName}"></h:outputText>
      </h:outputLink>
      </h:panelGroup>
      </c:forEach>
      </rich:toolBar>
      <rich:spacer height="20"></rich:spacer>

      <rich:listShuttle id="elemShuttle" var="auctType" converter="converter.AuctionType"
      sourceValue="#{programBean.auctionTypes}" sourceCaptionLabel="Existentes"
      targetValue="#{programBean.auctionTypesSld}" targetCaptionLabel="Autorizadas"
      orderControlsVisible="false" fastOrderControlsVisible="false">
      <rich:column>
      <h:outputText value="#{auctType.acutionName}"></h:outputText>
      </rich:column>
      <a4j:support id="supportID" event="onlistchanged" immediate="true" reRender="toolBar" actionListener="#{programBean.updateTipoSubastasSld}"/>
      </rich:listShuttle>


      </a4j:form>
      </ui:composition>


      --------
      public class ProgramBean implements java.io.Serializable {


      private List auctionTypes;
      private List auctionTypesSld;

      .
      .
      .
      public void setAuctionTypes(List auctionTypes) {
      this.auctionTypes = auctionTypes;
      }

      public List getAuctionTypes() {
      auctionTypes = getAuctionManager().loadAllAuctionTypes();
      return auctionTypes;
      }


      -------faces-config.xml

      <converter-id>converter.AuctionType</converter-id>
      <converter-class>com.bns.subastas.custom.converter.AuctionTypeConverter</converter-class>


      --------
      package com.bns.subastas.custom.converter;

      import com.bns.auction.model.auctionTypes.AuctionType;
      import java.io.Serializable;
      import javax.faces.component.UIComponent;
      import javax.faces.context.FacesContext;
      import javax.faces.convert.Converter;
      import javax.faces.convert.ConverterException;
      import org.apache.commons.lang.StringUtils;


      public class AuctionTypeConverter implements Converter {


      public AuctionTypeConverter() {
      }

      private boolean isObjectConvertible(Object value) {
      return (value instanceof AuctionType);
      }

      public Object getAsObject(
      FacesContext context,
      UIComponent component,
      String value)
      throws ConverterException {

      AuctionType aucType = new AuctionType();
      System.out.println("AuctionTypeConverter.getAsObject() value-- >"+value);

      if (!StringUtils.isEmpty(value)) {
      String[] splitArray = value.split(":");
      System.out.println("splitArray:"+splitArray);
      aucType.setId(Long.valueOf(splitArray[0]));
      aucType.setAcutionName(splitArray[1]);
      }
      //else{throw new ConverterException(message);
      //}


      return aucType;
      }

      public String getAsString(
      FacesContext context,
      UIComponent component,
      Object value)
      throws ConverterException {

      String valueStr = null;
      if (isObjectConvertible(value)) {
      System.out.println("isObjectConvertible");
      AuctionType aucType = (AuctionType) value;
      valueStr = aucType.getId() + ":" + aucType.getAcutionName();
      }
      return valueStr;
      }


      }