title: rich:listShuttle error when using complex object
body: <p><strong>WORKING:</strong> This is my working rich:listShuttle when sourceValue and target value are List of strings. </p>
  
  <p><strong>1. JSF Page</strong></p>
  
  <pre><code>&lt;rich:listShuttle id="companyJurisdictionShutle"
              sourceValue="#{companyAdminAction.statesList}"
              targetValue="#{companyAdminAction.selectedStates}"
              var="item" orderControlsVisible="false" fastOrderControlsVisible="false"
              sourceCaptionLabel="Available"
              targetCaptionLabel="Selected" styleClass="lishShuttle"&gt;
                   &lt;rich:column&gt;
                       #{item}
                   &lt;/rich:column&gt;
  &lt;/rich:listShuttle&gt;
  </code></pre>
  
  <p><strong>2. Backing Bean</strong></p>
  
  <pre><code>//sourceValue                    
  public List&lt;String&gt; getStatesList() {
  
      for (DMPJurisdiction dmpJurisdiction: jurisdictionList) {
          if(!statesList.contains(dmpJurisdiction.getJurisName())) {
              statesList.add(dmpJurisdiction.getJurisName());
          }
      }
      return statesList;
  }
  
  //targetValue
  public List&lt;String&gt; getSelectedStates() {
      return selectedStates;
  }
  </code></pre>
  
  <p><strong>3. Value Object</strong></p>
  
  <pre><code>public class DMPJurisdiction implements Serializable {
  
      /** serial version UID **/
      private final static Long serialVersionUID = 109892748283726L;
  
      /** jurisdiction id **/
      private Long jurisId;
  
      /** name **/
      private String jurisName;
  
      /** description **/
      private String jurisDescription;
  
      /** code **/
      private String jurisCode;
  
      //Getters and Setters
  
  } 
  </code></pre>
  
  <p><strong>NOT-WORKING:</strong> I changed the list shuttle, so that sourceValue and targetValue are list of complex object (DMPJurisdiction), not list of Strings as before. For which I wrote a converter.</p>
  
  <p><strong>1. JSF Page</strong></p>
  
  <pre><code>&lt;rich:listShuttle id="companyJurisdictionShutle"
        sourceValue="#{companyAdminAction.jurisdictionList}"
        targetValue="#{companyAdminAction.targetJurisdictionList}"
        converter="#{dmpJurisdictionConverter}"
        var="item" orderControlsVisible="false" fastOrderControlsVisible="false"
        sourceCaptionLabel="Available"
        targetCaptionLabel="Selected" styleClass="lishShuttle"&gt;
               &lt;rich:column&gt;
                  #{item.jurisName}
               &lt;/rich:column&gt;
   &lt;/rich:listShuttle&gt;
  </code></pre>
  
  <p><strong>2. Backing Bean</strong>: Now return list of complex object DMPJurisdiction listed above.</p>
  
  <pre><code>//sourceValue
  public List&lt;DMPJurisdiction&gt; getJurisdictionList() {
      return jurisdictionList;
  }
  
  //targetValue
      public List&lt;DMPJurisdiction&gt; getTargetJurisdictionList() {
      return targetJurisdictionList;
  }
  </code></pre>
  
  <p><strong>3. Converter</strong></p>
  
  <pre><code>public class DmpJurisdictionConverter implements javax.faces.convert.Converter {
  
        public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String s) {
            List&lt;DMPJurisdiction&gt; dmpJurisdictionList = Cache.loadAllDmpJurisdictions();
              for (DMPJurisdiction dmpJurisdiction : dmpJurisdictionList) {
                  if (dmpJurisdiction.getJurisName().equals(s)) {
                      return dmpJurisdiction;
                  }
              }
              return null;
        }
  
        public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object o) {
            List&lt;DMPJurisdiction&gt; dmpJurisdictionList = Cache.loadAllDmpJurisdictions();
              for (DMPJurisdiction dmpJurisdiction : dmpJurisdictionList) {
                  if (((DMPJurisdiction) o).getJurisName().equals(dmpJurisdiction.getJurisName())) {
                      return dmpJurisdiction.getJurisName();
                  }
              }
              return null;
        }
  
  }
  </code></pre>
  
  <p><strong>4. Error:</strong>     <code>sourceId=accountWorkcaseOpenTabForm:addDmpCompanySubview:companyJurisdictionShutle[severity=(ERROR 2), summary=(javax.el.PropertyNotFoundException: /html/workcase/type/dmp/admin/AddCompany.xhtml @55,98 sourceValue="#{companyAdminAction.jurisdictionList}": Property 'jurisdictionList' not writable on type java.util.List), detail=(javax.el.PropertyNotFoundException: /html/workcase/type/dmp/admin/AddCompany.xhtml @55,98 sourceValue="#{companyAdminAction.jurisdictionList}": Property 'jurisdictionList' not writable on type java.util.List)] ||||</code></p>
  
  <p><strong>NOTE:</strong> Just a side note, I am using the same dmpJurisdictionConverter successfully for selectOneMenu as shown below in a different <strong>unrelated</strong> JSF page.</p>
  
  <pre><code>&lt;h:selectOneMenu value="#{companyAdminAction.dmpJurisdiction}" converter="#{dmpJurisdictionConverter}"&gt;
                      &lt;s:selectItems var="item" value="#{companyAdminAction.jurisdictionList}" label="#{item.jurisName}"
                                     hideNoSelectionLabel="true" noSelectionLabel="-- Select Jurisdiction --"/&gt;
                      &lt;a4j:support event="onchange" action="#{companyAdminAction.loadCompanyList()}"
                               reRender="dmpCompanies"/&gt;
              &lt;/h:selectOneMenu&gt;
  </code></pre>