2017-02-07 53 views
1

我正在使用JSF標記h:selectManyListbox在JSP中顯示來自bean的項目列表。JSF selectManyListbox顯示值綁定錯誤

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

statusItems對象是在下面bean類中定義:

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中,我們有兩個不同的標籤selectItemselectItemsselectItem用於顯示單個項目,但我們可以使用多個selectItem標籤來顯示多個值。但是如果我們有一個selectItems的清單,那麼我們應該使用selectItems而不是selectItem。因此,與selectItems像下面代替你selectItem標籤上您的XHTML:

<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

除此之外,您還應該考慮替換值=「value」屬性從

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

要:

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