【问题标题】:JSF - UISelectItems problemJSF - UISelectItems 问题
【发布时间】:2010-12-16 05:38:01
【问题描述】:

我从编译器收到的奇怪错误:

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

那么,如果他期待 UISelectItems,却发现了 UISelectItems,那么错误在哪里?

我的 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;
}

然后,当然,我将它设置为 bean 变量 dbs。

帮助?

【问题讨论】:

    标签: java jsf uicomponents


    【解决方案1】:

    问题是 UISelectItem 是一个组件类,所以它必须通过 binding 属性与 jsf 标签配对。如果你想拥有 pure 值,你必须使用 SelectItem(s) 类。

    【讨论】:

      【解决方案2】:

      您必须返回 javax.faces.model.SelectItem 中的 Collection

      列表列表 = 新的 ArrayList(); list.add(new SelectItem(value, label));

      返回列表;

      【讨论】:

        【解决方案3】:

        &lt;f:selectItems value="#{bean.items}" /&gt; 需要以下值之一:

        public SelectItem[] getItems() {}
        
        public List<SelectItem> getItems() {}
        
        public Map<String, Object> getItems() {}
        

        常用的确实是List&lt;SelectItem&gt;

        编辑:作为对评论的回应:UISelectItem 代表&lt;f:selectItem&gt; 组件。这同样适用于UISelectItems&lt;f:selectItems&gt;。例如

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

        绑定为

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

        通过这种方式,您可以以编程方式控制组件 - 就像其他 UIComponent 一样。

        【讨论】:

        • 那么SelectItem和UISelectItem有什么区别呢?
        • SelectItem 表示值。 UISelectItem 代表组件。
        【解决方案4】:
        <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;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2011-06-17
          • 2014-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-28
          • 2011-07-31
          • 2011-05-31
          相关资源
          最近更新 更多