Java 下拉列表中的JSF树

Java 下拉列表中的JSF树,java,jsf,tree,drop-down-menu,Java,Jsf,Tree,Drop Down Menu,我想在JSF的下拉列表中显示一个树状结构。基本上,选择的项目是在一个层次结构,我想这是显而易见的下拉列表 可能吗 我不确定我是否理解你的要求。假设您希望菜单中的子类别略微缩进? 如果是这种情况,那么从服务器端/处理程序发送已经用“ ”(空格)或“-”解析过的项目数组如何 换句话说,您不能使用javascript来解析和理解类别层次结构。您有两个选项——要么通过JSF运行递归(对于需要设计页面的UI人员来说,这听起来很复杂,而且很难看),要么在服务器端进行排序,为JSF提供aleardy缩

我想在JSF的下拉列表中显示一个树状结构。基本上,选择的项目是在一个层次结构,我想这是显而易见的下拉列表


可能吗

我不确定我是否理解你的要求。假设您希望菜单中的子类别略微缩进? 如果是这种情况,那么从服务器端/处理程序发送已经用“ ”(空格)或“-”解析过的项目数组如何
换句话说,您不能使用javascript来解析和理解类别层次结构。您有两个选项——要么通过JSF运行递归(对于需要设计页面的UI人员来说,这听起来很复杂,而且很难看),要么在服务器端进行排序,为JSF提供aleardy缩进条目

希望这有帮助


Yishai

那么,你基本上想要一个HTML?使用

JSFbean(我假设JSF1.x):

私有字符串选项;//+getter+setter
私有列表选项;//+吸气剂
公共豆(){
选项=新的ArrayList();
SelectItemGroup group1=新建SelectItemGroup(“组1”);
组1.setSelectItems(新建SelectItem[]{
新建SelectItem(“组1值1”,“组1标签1”),
新建SelectItem(“组1值2”,“组1标签2”),
新建SelectItem(“组1值3”,“组1标签3”)
});
选项。添加(第1组);
SelectItemGroup group2=新建SelectItemGroup(“Group 2”);
组2.设置SelectItems(新建SelectItem[]{
新建SelectItem(“第2组值1”、“第2组标签1”),
新建SelectItem(“第2组值2”,“第2组标签2”),
新建SelectItem(“组2值3”,“组2标签3”)
});
选项。添加(第2组);
}
JSF视图:


生成的HTML示例:


第1组标签1
第1组标签2
第1组标签3
第2组标签1
第2组标签2
第2组标签3
它在浏览器中的外观:


但嵌套组未正确显示。它们显示为项目而不是组。

组合框中的树。我无法想象它的用途,你能详细说明一下吗]我想他实际上指的是下拉菜单,如
h:selectOneMenu
,而不是组合框(可编辑的下拉菜单)。是的,你说得对,我的选项分为多个类别,每个类别下都有一些选项。对于使用Omnifaces
SelectItemsConverter
公开对象而不是字符串的人来说,这也非常有效。
private String option; // +getter +setter
private List<SelectItem> options; // +getter

public Bean() {
    options = new ArrayList<SelectItem>();

    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")
    });
    options.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")
    });
    options.add(group2);
}