2017-02-07 2 views
1

Я использую тег JSF h: selectManyListbox в JSP, чтобы отобразить список элементов из компонента.JSF selectManyListbox показывает ошибку привязки значения

<h:selectManyListbox value="#{settingsBean.statusIds}" style="width: 100%; height: 200px;"> 
    <f:selectItem value="#{settingsBean.statusItems}" /> 
</h:selectManyListbox> 

statusItems объекта определяется в следующем классе компоненты:

SettingsBean.java

public class SettingsBean { 
    private List<String> statusIds; 
    private List<SelectItem> statusItems; 

    public SettingsBean() { 
     initStatus(); 
    }  

    private void initStatus() { 
     statusItems = new ArrayList<SelectItem>(); 

     statusItems.add(new SelectItem("v1", "lbl1")); 
     statusItems.add(new SelectItem("v2", "lbl2")); 
     statusItems.add(new SelectItem("v3", "lbl3")); 
    } 

    public ArrayList getStatusItems(){ 
     return getStatusItemsList(false); 
    } 

    @SuppressWarnings("unchecked") 
    private ArrayList getStatusItemsList(boolean selected) { 
     ArrayList ids = new ArrayList();  
     if (!selected) { 
      boolean inSelIds = false; 
      for (int i=0; i < statusItems.size(); i++) { 
       inSelIds = false; 
       SelectItem item = (SelectItem)statusItems.get(i); 

       if (selected==inSelIds) { 
        String text = item.getLabel();     
        //ids.add(text); 
        ids.add(new SelectItem(item.getValue(), text)); 
       } 
      } 
     } 

     return ids; 
    } 
} 

Но я получаю сообщение об ошибке при загрузке:


HTTP Status 500 - java.lang.IllegalArgumentException: Value binding '#{settingsBean.statusItems}' of UISelectItem : {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /jsp/Settings.jsp][Class: javax.faces.component.html.HtmlSelectManyListbox,Id: _id3][Class: javax.faces.component.UISelectItem,Id: _id4]} does not reference an Object of type SelectItem 

Что мне следует упустить или вызвать эту проблему? Благодарим за помощь.

+0

это тип проблемы объекта, который вы используете тип данных, а не с другой –

ответ

0

В JSF у нас есть два разных тега selectItem и selectItems. selectItem используется для отображения одного элемента, хотя мы можем использовать несколько тегов selectItem для отображения нескольких значений. Но если у нас есть список selectItems, мы должны использовать selectItems, а не selectItem. Так заменить вам selectItem тег на вашем XHTML с selectItems, как показано ниже:

<h:selectManyListbox value="#{settingsBean.statusIds}" style="width: 100%; height: 200px;"> 
    <f:selectItems value="#{settingsBean.statusItems}" /> 
</h:selectManyListbox> 
+0

@NJ Франциско: Вы генерироваться сеттер/добытчика для statusIds ? – proudandhonour

+0

сейчас работает. Я ценю помощь! – Junior

-1

Ваша переписка не совсем корректна. В этом случае вам нужно использовать либо коллекцию или массив, как в примере: https://www.tutorialspoint.com/jsf/jsf_selectmanylistbox_tag.htm

Кроме того, следует рассмотреть заменить значение = «значение» атрибут из

<f:selectItem value="#{settingsBean.statusItems}" /> 

Для:

<f:selectItem itemValue="#{settingsBean.statusItems}" /> 
Смежные вопросы