如何在jsf2(richfaces)中动态渲染面板菜单项

时间:2014-05-31 14:12:48

标签: jsf-2 richfaces

我是JSF 2.0的新手,并尝试将面板菜单项动态渲染到我的xhtml页面中。 例如:

Header_1
 |---SubHeader_1
 |     |----Item_1.1
 |     |----Item_1.2
 |     |----Item_1.3
 |---SubHeader_2
 |     |----Item_2.1
 |     |----Item_2.2

我想在数据库Item_1.x中动态加载Item_2.xhome.xhtml。请提供宝贵的建议,我该怎么做。

1 个答案:

答案 0 :(得分:3)

您可以尝试以下代码:希望这会对您有所帮助 -

菜单项的数据由MenuItem类

表示
public class MenuItem {
    private int id;
    private String label;

    public MenuItem(String label, int id) {
       super();
       this.label = label;
       this.id = id;
    }

    public int getId() {
       return this.id;
    }

    public String getLabel() {
       return this.label;
    }

    public void setId(int id) {
       this.id = id;
    }

    public void setLabel(String label) {
       this.label = label;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("MenuItem [id=");
        builder.append(this.id);
        builder.append(", label=");
        builder.append(this.label);
        builder.append("]");
        return builder.toString();
    }
 }

DynamicMenu类支持动态菜单。它提供了菜单项列表和操作方法:

import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.jboss.seam.annotations.Name;

@Name("dynMenu")
public class DynamicMenu {

    private Logger log = Logger.getLogger(DynamicMenu.class.getName());

    public void action(int id) {
        log.info("Action called with menu item id: " + id);
    }

    public List<menuitem> getMenuItems() {

        List<menuitem> menuItems = new ArrayList<menuitem>();

        menuItems.add(new MenuItem("Menu Item #1", 1));
        menuItems.add(new MenuItem("Menu Item #2", 2));
        menuItems.add(new MenuItem("Menu Item #3", 3));

        return menuItems;
    }
}

以下代码段包含动态菜单xhtml示例。动态菜单项中的键是<c:forEach>迭代器。名称空间声明非常重要,它应该是xmlns:c="http://java.sun.com/jstl/core"。如果你使用xmlns:c="http://java.sun.com/jsp/jstl/core"命名空间,那么迭代器就不会工作了!

<h:form xmlns:h="http://java.sun.com/jsf/html">
    <rich:dropDownMenu value="Dynamic Menu Item Example" style="text-decoration:none;">
        <c:forEach xmlns:c="http://java.sun.com/jstl/core" var="item" 
                                        items="#{dynMenu.getMenuItems()}">

            <rich:menuItem id="menuItem#{item.id}" submitMode="ajax"
                    value="#{item.label}" action="#{dynMenu.action(item.id)}">
            </rich:menuItem>
        </c:forEach>
    </rich:dropDownMenu>
</h:form>