Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 了解SelectItemGroup_Jsf_Jsf 2_Renderer_Selectoneradio - Fatal编程技术网

Jsf 了解SelectItemGroup

Jsf 了解SelectItemGroup,jsf,jsf-2,renderer,selectoneradio,Jsf,Jsf 2,Renderer,Selectoneradio,深入研究RadioRenderer源代码,我注意到以下几点: 方法 @Override protected void renderOption(FacesContext context, UIComponent component, Converter converter, SelectItem curItem,

深入研究
RadioRenderer
源代码,我注意到以下几点:

方法

@Override
protected void renderOption(FacesContext context,
                            UIComponent component,
                            Converter converter,
                            SelectItem curItem,
                            Object currentSelections,
                            Object[] submittedValues,
                            boolean alignVertical,
                            int itemNumber,
                            OptionComponentInfo optionInfo) throws IOException
正在从标准的
public void encodeEnd(FacesContext上下文,UIComponent组件)
Renderer方法调用
RadioRenderer
类中重写的。但有以下代码:

Iterator<SelectItem> items =
          RenderKitUtils.getSelectItems(context, component);
//some code
while (items.hasNext()) {
        SelectItem curItem = items.next();
        idx++;
        // If we come across a group of options, render them as a nested
        // table.
        if (curItem instanceof SelectItemGroup) {
             // do some
        else {
             // do another
        }
}
迭代器项=
getSelectItems(上下文、组件);
//一些代码
while(items.hasNext()){
选择item curItem=items.next();
idx++;
//如果遇到一组选项,请将它们渲染为嵌套的
//桌子。
if(SelectItemGroup的curItem实例){
//做一些
否则{
//再做一次
}
}
所以,我试着用这个例子:

<h:selectOneRadio>
    <f:selectItem />
    <f:selectItems value="#{myBean.vals}" />
    <f:selectItems value="#{myBean.valss}" />
</h:selectOneRadio>

selectItem
selectItems
es被视为不是
SelectItemGroup
的实例。对于
selectItem
,这一点非常清楚,但我希望
selectItems
会映射到
SelectItemGroup
实例


您能稍微澄清一下吗?

它不能以声明的方式创建。它只能以编程的方式创建。
还支持
列表
,其实例为子类。下面是其相关性的摘录:

SelectItemGroup是的子类,用于标识一组选项,这些选项将作为从属“子菜单”或“选项列表”提供,具体取决于实际使用的或渲染器的要求。通常,此实例的value属性将被忽略,而此实例的label属性将用于标记子菜单

以下是如何创建它们的基本示例:

private List<SelectItem> availableItems; // +getter

@PostConstruct
public void init() {
    availableItems = new ArrayList<>();

    SelectItemGroup group1 = new SelectItemGroup("Group 1");
    group1.setSelectItems(new SelectItem[] {
        new SelectItem("Group 1 Value 1", "Group 1 Label 1"),
        new SelectItem("Group 1 Value 2", "Group 1 Label 2"),
        new SelectItem("Group 1 Value 3", "Group 1 Label 3")
    });
    availableItems.add(group1);

    SelectItemGroup group2 = new SelectItemGroup("Group 2");
    group2.setSelectItems(new SelectItem[] {
        new SelectItem("Group 2 Value 1", "Group 2 Label 1"),
        new SelectItem("Group 2 Value 2", "Group 2 Label 2"),
        new SelectItem("Group 2 Value 3", "Group 2 Label 3")
    });
    availableItems.add(group2);
}


在中,它将呈现为一棵树,其中包含嵌套在
中的选项值(这实际上是
SelectItemGroup
的主要用例):



也支持它(具有完全相同的渲染,但仅支持单个选择):



具有与
相同的嵌套表呈现(语义上不方便):



这本书一点用都没有,所以我跳过它

另见:

JSF还应该提供一种声明性方法,以与html
保持一致。可选的,它们可以提供一个
groupBy
groupLabel
属性,因为两级层次结构通常就足够了。感谢该组件。始终在OmniFaces上下注:)
<f:selectItems value="#{bean.availableItems}" />
<h:selectOneRadio layout="pageDirection">
    <f:selectItems value="#{bean.availableItems}" />
</h:selectOneRadio>
<h:selectOneMenu>
    <f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
<h:selectManyListbox>
    <f:selectItems value="#{bean.availableItems}" />
</h:selectManyListbox>
<h:selectManyCheckbox layout="pageDirection">
    <f:selectItems value="#{bean.availableItems}" />
</h:selectManyCheckbox>