2009-11-13 4 views
4

Странная ошибка я получил от компилятора:JSF - UISelectItems проблема

Expected a child component type of UISelectItem/UISelectItems for component type javax.faces.SelectOne(siachoice). Found javax.faces.component.UISelectItems. 

Так что, если он ожидает UISelectItems, и нашел UISelectItems, то где ошибка?

реализация My JSP:

<h:selectOneMenu id="siachoice" value="#{dbSelectBean.currentOption}"> 
           <f:selectItems value="#{dbSelectBean.dbs}" /> 
          </h:selectOneMenu> 

метод, где я ставлю UISelectItem к UISelectItems:

private UISelectItems populateDatabases(String databaseString) { 
    UISelectItems selects = new UISelectItems(); 
    List<UISelectItem> result = new ArrayList<UISelectItem>(); 
    StringTokenizer tokeniz = new StringTokenizer(databaseString, GlobalConstants.DELIMITER); 
    while(tokeniz.hasMoreTokens()){ 
     String tempDB = tokeniz.nextToken(); 
     UISelectItem item = new UISelectItem(); 
     item.setItemValue(tempDB); 
     item.setItemLabel(tempDB); 
     result.add(item); 
    } 
    selects.setValue(result); 

    return selects; 
} 

Тогда, конечно, я ставлю его в переменной д.б.н. боба.

Помощь?

ответ

4

Вы должны возвращать Collection из javax.faces.model.SelectItem

 
List list = new ArrayList(); 
list.add(new SelectItem(value, label));

return list;

+0

Любые примеры, пожалуйста? – Yurish

+0

Отметьте обновленное сообщение – Bozho

+0

Это работает, спасибо! – Yurish

0

Проблема заключается в том, что UISelectItem является компонентом clas, поэтому он должен быть сопряжен с тегом jsf атрибутом binding. Если вы хотите иметь чистые значения, вы должны использовать SelectItem(s) классы.

4

<f:selectItems value="#{bean.items}" /> ожидает один из следующих значений:

public SelectItem[] getItems() {} 

public List<SelectItem> getItems() {} 

public Map<String, Object> getItems() {} 

Обычно используется один действительно List<SelectItem>.

Редактировать: как ответ на комментарий: UISelectItem представляет собой компонент <f:selectItem>. То же самое относится к UISelectItems и <f:selectItems>. Например.

<f:selectItem binding="#{bean.selectItem}" /> 
<f:selectItems binding="#{bean.selectItems}" /> 

, которые связаны, как

private UISelectItem selectItem; 
private UISelectItems selectItems; 
// +getter +setter 

таким образом, вы можете контролировать компоненты программно -как для любого другого UIComponent.

+0

Тогда какая разница между SelectItem и UISelectItem? – Yurish

+1

SelectItem представляет значение. UISelectItem представляет компонент. – BalusC

1
<h:form> 
<h:selectOneListbox size="5" > 

<f:selectItems value="#{userManager.Test()}" /> 
</h:selectOneListbox> 
</h:form> 

import javax.faces.model.SelectItem; 
import tn.com.ttnproject.entity.*; 

@Name("userManager") 
@Scope(ScopeType.CONVERSATION) 
public class UserManager { 
    public List <SelectItem> listAllUsersNames; 
    SelectItem element; 
    public List<SelectItem> Test(){ 
     listAllUsersNames = new ArrayList<SelectItem>(); 
     for (int i=1;i<=10;i++) 
     { 
      element=new SelectItem(
       new Integer(i), 
       i+".00 euros", 
       "Produit à "+i+".00 euros"); 
      listAllUsersNames.add(element); 
     } 
     return listAllUsersNames; 
    } 
}