使用MenuModel支持的菜单进行Primefaces布局导航

时间:2011-12-20 21:34:10

标签: jsf-2 primefaces

使用PrimeFaces,我想基于用户与菜单(以编程方式创建的MenuModel)的交互来更新/刷新页面中央布局单元,该菜单包含在相同的页面东部布局单元中。据我所知,这是不可能的,但很可能是错的。谢谢!

subMenu = new Submenu();
subMenu.setLabel("Sales");  
subMenu.setIcon("ui-icon ui-icon-home");

-

private String currentPage; //holds identifier of current content panel

-

<!-- navigation panel -->
<p:layoutUnit position="west" resizable="false" size="216">
    <ui:include src="./includes/navigationMenu.xhtml" />
</p:layoutUnit>  

<!-- content panel -->
<p:layoutUnit position="center">
    <ui:include src="/views/#{navigationBean.currentPage}.xhtml" />         
</p:layoutUnit>

谢谢!

2 个答案:

答案 0 :(得分:0)

这只是一个问题:为什么要以编程方式创建菜单?

除了几乎所有可能的内容之外:尝试将ui:include包含到带有id的表单组件中(假设 myFormId )并尝试每次子菜单项时更新此表单被选中;好吧,让我们以编程方式做到这一点:

MenuItem item = new MenuItem();
item.setValue("Dynamic Menuitem");
item.setUrl("#");                    //add whatever attribute you want to menuItem
item.setUpdate("myFormId");
subMenu.getChildren().add(item);     //then add the menuItem object to subMenu as a child.

您可以在此处找到menuItem API

答案 1 :(得分:0)

我实现了一个监听器..

MenuItem thisItem = (MenuItem)event.getComponent();
String navigateTo = thisItem.getId();
BeanManager beanManager = new BeanManager();
NavigationBean navBean = (NavigationBean)beanManager.get("navigationBean");
navBean.setCurrentPage(navigateTo);

将其添加到MenuItem以及调用模板refresh()...

item.addActionListener(new MenuItemListener());
item.setOnsuccess("refresh()");

添加了刷新方法......

function refresh(){
    document.location="#{request.contextPath}/faces/views/main.xhtml";
}

我真的不关心这个解决方案,但它比替代方案更好,在标记中有不可测试的菜单创建逻辑。