2013-04-29 2 views
3
<h:selectManyListbox id="sectorsListBox" size="2" multiple="multiple" value="#{Mybean.classificationSelectedItems}"> 
     <f:selectItems id="sectors" value="#{Mybean.classificationSelectItems}"/> 
</h:selectManyListbox> 

Резервное Bean имеет:ч: selectManyListBox сеттер не устанавливать все значения, выбранные

public class Mybean 
{ 
private Map<String,String> classificationSelectItems = new LinkedHashMap<String,String>(); 
private List<String> classificationSelectedItems = new ArrayList<String>(); 

//getter and setter for both. 
} 
init() 
{ 
classificationSelectItems.put("INS","Insurance") 
classificationSelectItems.put("HLC","HealthCare") 
} 

Выбрать, многие окно инициализируется с этими 2 значениями, но проблема только последняя выбранная запись становится хранится в classificationSelectedItems. Почему это так ? И как я могу получить все выбранные записи, хранящиеся в списке классификацииSelectedItems?

Добавление FYI, метод init - это класс по весне.

+0

Я только что опробовал пример и отлично работает (я использую List alter String []): http://www.mkyong.com/jsf2/jsf-2-multiple-select-listbox-example/ –

+0

Если вы выберите как Страхование, так и HealthCare, оба устанавливаются в вашей классификацииSelectedItems? – Phoenix

+0

Можете ли вы опубликовать код? – Phoenix

ответ

1

я испытал с нелогич- (ссылка: http://www.mkyong.com/jsf2/jsf-2-multiple-select-listbox-example/), удачи :)

Facelets:

<h:form id="form"> 
     <h:selectManyListbox value="#{user.favFood1}" > 
      <f:selectItems value="#{user.favFood2Value}" /> 
     </h:selectManyListbox> 
     <h:commandButton value="test"/> 
    </h:form> 

Бобовые:

@ManagedBean(name = "user") 
@ViewScoped 
public class UserBean implements Serializable { 

    private static final long serialVersionUID = 1L; 
    public List<String> favFood1; 
    private Map<String, Object> food2Value; 

    public UserBean() { 
     favFood1 = new ArrayList<String>(); 
     food2Value = new LinkedHashMap<String, Object>(); 
     food2Value.put("Food2 - Fry Checken", "Fry Checken1"); //label, value 
     food2Value.put("Food2 - Tomyam Soup", "Tomyam Soup2"); 
     food2Value.put("Food2 - Mixed Rice", "Mixed Rice3"); 
    } 

    public List<String> getFavFood1() { 
     return favFood1; 
    } 

    public void setFavFood1(List<String> favFood1) { 
     this.favFood1 = favFood1; 
    } 

    public Map<String, Object> getFavFood2Value() { 
     return food2Value; 
    } 
} 
+0

Rong, я использую mojarra – Phoenix

+0

Я тоже использую mojarra 2.1.21 :) –

0

я заметил именно это когда я использовал Collection в методе сеттера, например

public void setClassificationSelectedItems(Collection<String> in){ 
    // store it somewhere 
} 

Этот сеттер вызывается во время фазы восстановления, но не во время фазы обновления, поэтому установленное ранее значение будет установлено, но никогда не будет установлено новое. Если вы используете List, он работает, как ожидалось:

public void setClassificationSelectedItems(List<String> in){ 
    // store it somewhere 
} 

Обратите внимание, что вам нужно будет повторно развернуть приложение после такого изменения, поскольку JSP нужно перекомпилировать, но это не будет сделано автоматически.