使用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>
谢谢!
答案 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";
}
我真的不关心这个解决方案,但它比替代方案更好,在标记中有不可测试的菜单创建逻辑。