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
的主要用例):
也支持它(具有完全相同的渲染,但仅支持单个选择):
具有与
相同的嵌套表呈现(语义上不方便):
这本书一点用都没有,所以我跳过它 另见:
保持一致。可选的,它们可以提供一个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>