问题
Hey I new using jsf so I want to build a dynamic menu with items loaded from database but I'm not sure what functions do I need or how to construct the backing bean for the menu. I already have the database create and three tables Rol, User, Rol x User, Items. Also what will be good attributes for the item table??.
回答1:
Each Rol
should have Items
so you need an extra table ItemsXRol
i would choose this columns for Item
: id, label, url, tooltip, father_item, level
something like that, of course you should choose your columns in order to fill your needs.
Then to create the menu dynamically getting the items from the db using Primefaces you can use a MenuModel
object.
//MenuBean
model = new DefaultMenuModel();
//First submenu
DefaultSubMenu firstSubmenu = new DefaultSubMenu("Dynamic Submenu");
DefaultMenuItem item = new DefaultMenuItem("External");
item.setUrl("http://www.primefaces.org");
item.setIcon("ui-icon-home");
firstSubmenu.addElement(item);
model.addElement(firstSubmenu);
//Second submenu
...
And in the .xhtml file you put something like this:
<p:menu model="#{menuBean.model}"/>
But to generate the menu getting values from the database you can use a DAO to get the MenuItems from your entity.
If your menu has a n-level format it could become handy a recursive method to generate the MenuModel
in which you have to iterate over your Items
to create the 1st level menus and then recursively the childs of each father.
If you want to read more about MenuModel
go to https://www.primefaces.org/showcase/ui/menu/menu.xhtml
回答2:
Primefaces provide you a programmatic way to dynamically build your menu using org.primefaces.model.menu.*
classes. Use a MenuModel
in your managed bean and reference it on your facelet page. Example:
public class MenuBean {
private MenuModel model;
public MenuBean() {
// Build your menu here
}
// Gets and sets
}
And on your facelet:
<p:menu model="#{menuBean.model}"/>
Further details: http://www.primefaces.org/showcase/ui/menu.jsf
来源:https://stackoverflow.com/questions/19659087/how-to-build-a-dynamic-menu