Jsf 2 Primefaces使用菜单Model backed菜单进行布局导航

Jsf 2 Primefaces使用菜单Model backed菜单进行布局导航,jsf-2,primefaces,Jsf 2,Primefaces,使用PrimeFaces,我希望根据用户与菜单(编程创建的菜单模型)的交互来更新/刷新页面中心布局单元,该菜单包含在相同的页面东部布局单元中。据我所知,这是不可能的,但很可能是错误的。谢谢 subMenu = new Submenu(); subMenu.setLabel("Sales"); subMenu.setIcon("ui-icon ui-icon-home"); - - 谢谢 这只是一个问题:为什么要以编程方式创建菜单 除此之外,几乎所有可能的方法都是:尝试将ui:inclu

使用PrimeFaces,我希望根据用户与菜单(编程创建的菜单模型)的交互来更新/刷新页面中心布局单元,该菜单包含在相同的页面东部布局单元中。据我所知,这是不可能的,但很可能是错误的。谢谢

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

-



谢谢

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

除此之外,几乎所有可能的方法都是:尝试将
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 thisItem = (MenuItem)event.getComponent();
String navigateTo = thisItem.getId();
BeanManager beanManager = new BeanManager();
NavigationBean navBean = (NavigationBean)beanManager.get("navigationBean");
navBean.setCurrentPage(navigateTo);
将其添加到MenuItem以及对templates refresh()的调用

已添加刷新方法

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

我真的不喜欢这个解决方案,但它比另一个更好,在标记中有不稳定的菜单创建逻辑。

因为菜单根据登录者的不同而变化,并且坚持严格的mvc,我认为菜单创建背后的逻辑不应该在HTML中找到。我理解您在代码示例中所做的工作,这就是我的工作。问题是,我如何更新我的导航bean
currentPage
,这样当我更新表单时,
会指向正确的页面。这是我认为不可行的。谢谢@为什么我的解决方案不起作用?你必须思考和搜索一点:你创建一些菜单项,将它们插入子菜单,在更新旁边你可以使用方法
项。addActionListener
,实现一些代码,在每个菜单项选择时动态更改
currentPage
变量。。。这里是一些我尝试使用动作监听器的相关示例,它不能正常工作。我同意,您的解决方案在逻辑上应该可以工作,并且符合API,但由于某些原因它不能工作。当我实现API时,它确实更新了bean,但是页面似乎是在bean更新之前更新的,所以在刷新浏览器之前我没有看到“新”内容。此外,我还尝试使用onSuccess()。谢谢你的帮助@修改您的代码并尝试使用RequestContext对象…使用RequestContext更新和更改值对我来说,API中的一个缺点是无法以与JS相同的方式传递EL。我对JSF还不太熟悉,我确信有一种方法可以让它工作,但是ActionListeners和从RequestContext中提取似乎需要为一个简单的导航菜单维护很多代码。谢谢你的帮助!
MenuItem thisItem = (MenuItem)event.getComponent();
String navigateTo = thisItem.getId();
BeanManager beanManager = new BeanManager();
NavigationBean navBean = (NavigationBean)beanManager.get("navigationBean");
navBean.setCurrentPage(navigateTo);
item.addActionListener(new MenuItemListener());
item.setOnsuccess("refresh()");
function refresh(){
    document.location="#{request.contextPath}/faces/views/main.xhtml";
}