2010-03-07 2 views
3

Я новичок в компонентах Richfaces. Когда я использую <rich:listShuttle>, Arraylist, указанный в targetValue, теперь обновляется с последними данными?Почему компонент listShuttle в richFaces не обновляется?

MyJSF Файл

<a4j:region> 
<rich:listShuttle sourceValue="#{bean.selectItems}" id="one" 
targetValue="#{bean.selectItemsone}" var="items" listsHeight="150" 
sourceListWidth="130" targetListWidth="130" 
sourceCaptionLabel="Intial Items" 
targetCaptionLabel="Selected Items" converter="Listconverter"> 
    <rich:column> 
     <h:outputText value="#{items.value}"></h:outputText> 
    </rich:column> 
</rich:listShuttle> 
</a4j:region> 
<a4j:region> 
<a4j:commandButton value="Submit" action="#{bean.action}" /> 
</a4j:region> 

управляемому Bean

private List<String> selectedData; 
private List<BeanItems> selectItems; 
private List<BeanItems> selectItemsone; 

public String action() { 
    System.out.println(selectItems); 
    System.out.println(selectItemsone); 
    System.out.println("Select Item List"); 
    Iterator<BeanItems> iterator = selectItems.iterator(); 
    while (iterator.hasNext()) { 
     BeanItems item = (BeanItems) iterator.next(); 
     System.out.println(item.getValue()); 
    } 
    System.out.println("/nSelect Item one list "); 
    Iterator<BeanItems> iterator2 = selectItemsone.iterator(); 
    while (iterator2.hasNext()) { 
     BeanItems item = (BeanItems) iterator2.next(); 
     System.out.println(item.getValue()); 
    } 
    return ""; 
} 

public void setSelectedData(List<String> selectedData) { 
    this.selectedData = selectedData; 
} 

public List<String> getSelectedData() { 
    return selectedData; 
} 

/** 
* @return the selectItems 
*/ 
public List<BeanItems> getSelectItems() { 
    if (selectItems == null) { 
     selectItems = new ArrayList<BeanItems>(); 
     selectItems.add(new BeanItems("value4", "label4")); 
     selectItems.add(new BeanItems("value5", "label5")); 
     selectItems.add(new BeanItems("value6", "label6")); 
     selectItems.add(new BeanItems("value7", "label7")); 
     selectItems.add(new BeanItems("value8", "label8")); 
     selectItems.add(new BeanItems("value9", "label9")); 
     selectItems.add(new BeanItems("value10", "label10")); 

    } 
    return selectItems; 
} 

/** 
* @return the selectItemsone 
*/ 
public List<BeanItems> getSelectItemsone() { 
    if (selectItemsone == null) { 
     selectItemsone = new ArrayList<BeanItems>(); 
     selectItemsone.add(new BeanItems("value1", "label1")); 
     selectItemsone.add(new BeanItems("value2", "label2")); 
     selectItemsone.add(new BeanItems("value3", "label3")); 
    } 
    return selectItemsone; 
} 

Мой конвертер класса

public Object getAsObject(FacesContext context, UIComponent component,String value) { 
      int index = value.indexOf(':'); 
      return new BeanItems(value.substring(0, index), value.substring(index + 1)); 
     } 

public String getAsString(FacesContext context, UIComponent component,Object value) { 
      BeanItems beanItems = (BeanItems) value; 
      return beanItems.getValue() + ":" + beanItems.getData(); 
     } 

Мой BeanItems Класс

private String data; //Getter & setter 
private String value; //Getter & setter 

public BeanItems() { 

} 

public BeanItems(String value, String data) { 
    this.value = value; 
    this.data = data; 
} 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + ((data == null) ? 0 : data.hashCode()); 
    result = prime * result + ((value == null) ? 0 : value.hashCode()); 
    return result; 
} 

public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    final BeanItems other = (BeanItems) obj; 
    if (data == null) { 
     if (other.data != null) 
      return false; 
    } else if (!data.equals(other.data)) 
     return false; 
    if (value == null) { 
     if (other.value != null) 
      return false; 
    } else if (!value.equals(other.value)) 
     return false; 
    return true; 
} 
+1

У меня нет обширного практического опыта работы с RichFaces, поэтому я могу ошибаться, но не все ли должно быть внутри ** того же ** 'a4j: region'? – BalusC

+0

, когда i, но все компоненты внутри того же региона, метод действия, указанный для командной кнопки, не вызывается, например, сама кнопка неактивна. – Hariharbalaji

+0

спасибо daedlus и BalusC за ответы и советы для ура, проблема решена – Hariharbalaji

ответ

2

Если ваш вопрос о том, что целевой список не getitng заселена, то я думаю, вы должны переопределить равных, метод хэш-кода для объекта оболочки [BeanItem], так как в преобразователе вы каждый раз создавая новый объект в методе getAsObject.

Также попробуйте положить h: тег сообщения, завернутый в --a4j: outputPanel ajaxRendered = "true" - на вашей странице напечатать любые ошибки преобразования, которые могут быть получены.

+0

@daedlus: я уже переопределил хэш-код и метод equals, я добавил класс BeanItem в вопрос. – Hariharbalaji

+0

если я сделал некоторые неправильные вещи, переопределив метод, просьба упомянуть об этом и спасибо за советы – Hariharbalaji

+0

@daedlus: Спасибо за ответ, который он сейчас работает. даже если кнопка comman находится внутри или за пределами региона. – Hariharbalaji

Смежные вопросы