下拉列表中的JSF树

时间:2010-11-18 11:43:01

标签: java jsf tree drop-down-menu

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

有可能吗?

3 个答案:

答案 0 :(得分:24)

那么,你基本上想要一个HTML <optgroup>?使用SelectItemGroup

JSF bean(我假设是JSF 1.x):

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);
}

JSF视图:

<h:selectOneMenu value="#{bean.option}">
    <f:selectItems value="#{bean.options}" />
</h:selectOneMenu>

生成的HTML示例:

<select name="j_idt6:j_idt7" size="1">
    <optgroup label="Group 1">
        <option value="Group 1 Value 1">Group 1 Label 1</option>
        <option value="Group 1 Value 2">Group 1 Label 2</option>
        <option value="Group 1 Value 3">Group 1 Label 3</option>
    </optgroup>
    <optgroup label="Group 2">
        <option value="Group 2 Value 1">Group 2 Label 1</option>
        <option value="Group 2 Value 2">Group 2 Label 2</option>
        <option value="Group 2 Value 3">Group 2 Label 3</option>
    </optgroup>
</select>

在浏览器中的样子:

alt text

答案 1 :(得分:1)

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

希望这有帮助,

伊沙伊

答案 2 :(得分:0)

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