Reputation: 336
How to instantiate a MenuItem and Submenu?
I have the following code is from a tutorial on PrimeFaces I was following, but I have no way to instantiate MenuItem and Submenu because they are interfaces, but the tutorial does not say anything. I think it might be because of the version of PrimeFaces. Can someone help me make this code work?
package br.com.k19.controle;
import javax.faces.bean.ManagedBean;
import org.primefaces.component.column.Column;
import org.primefaces.model.menu.DefaultMenuModel;
import org.primefaces.model.menu.MenuItem;
import org.primefaces.model.menu.MenuModel;
import org.primefaces.model.menu.Submenu;
@ManagedBean
public class MegaMenuBean {
private MenuModel menuModel;
public MegaMenuBean() {
this.menuModel = new DefaultMenuModel();
Submenu esporteMenu = new Submenu();
esporteMenu.setLabel("Esportes");
Submenu futebolMenu = new Submenu();
futebolMenu.setLabel("Futebol");
MenuItem item = new MenuItem();
item.setValue("Brasileiro");
item.setUrl("#");
futebolMenu.getChildren().add(item);
item = new MenuItem();
item.setValue("Europeu");
item.setUrl("#");
futebolMenu.getChildren().add(item);
item = new MenuItem();
item.setValue("Japonês");
item.setUrl("#");
futebolMenu.getChildren().add(item);
Submenu voleiMenu = new Submenu();
voleiMenu.setLabel("Volei");
item = new MenuItem();
item.setValue("Liga Mundial");
item.setUrl("#");
voleiMenu.getChildren().add(item);
item = new MenuItem();
item.setValue("Eliminatórias da Copa");
item.setUrl("#");
voleiMenu.getChildren().add(item);
Submenu automobilismoMenu = new Submenu();
automobilismoMenu.setLabel("Automobilismo");
item = new MenuItem();
item.setValue("Fórmula 1");
item.setUrl("#");
automobilismoMenu.getChildren().add(item);
item = new MenuItem();
item.setValue("Fórmula 3");
item.setUrl("#");
automobilismoMenu.getChildren().add(item);
item = new MenuItem();
item.setValue("Fotos");
item.setUrl("#");
automobilismoMenu.getChildren().add(item);
Column esporteColuna1 = new Column();
esporteColuna1.getChildren().add(futebolMenu);
esporteColuna1.getChildren().add(voleiMenu);
esporteMenu.getChildren().add(esporteColuna1);
Column esporteColuna2 = new Column();
esporteColuna2.getChildren().add(automobilismoMenuesporteMenu.getChildren().add(esporteColuna2);
this.menuModel.addSubmenu(esporteMenu);
Submenu noticiaMenu = new Submenu();
noticiaMenu.setLabel("Notícias");
Submenu economiaMenu = new Submenu();
economiaMenu.setLabel("Economia");
item = new MenuItem();
item.setValue("Brasil");
item.setUrl("#");
economiaMenu.getChildren().add(item);
item = new MenuItem();
item.setValue("Mundo");
item.setUrl("#");
economiaMenu.getChildren().add(item);
Submenu tecnologiaMenu = new Submenu();
tecnologiaMenu.setLabel("Tecnologia");
item = new MenuItem();
item.setValue("Segurança");
item.setUrl("#");
tecnologiaMenu.getChildren().add(item);
item = new MenuItem();
item.setValue("Negócios em TI");
item.setUrl("#");
tecnologiaMenu.getChildren().add(item);
Submenu educacaoMenu = new Submenu();
educacaoMenu.setLabel("Educação");
item = new MenuItem();
item.setValue("Vestibular");
item.setUrl("#");
educacaoMenu.getChildren().add(item);
item = new MenuItem();
item.setValue("ENEM");
item.setUrl("#");
educacaoMenu.getChildren().add(item);
item = new MenuItem();
item.setValue("ProUni");
item.setUrl("#");
educacaoMenu.getChildren().add(item);
Column noticiaColuna1 = new Column();
noticiaColuna1.getChildren().add(economiaMenu);
noticiaColuna1.getChildren().add(tecnologiaMenu);
noticiaMenu.getChildren().add(noticiaColuna1);
Column noticiaColuna2 = new Column();
noticiaColuna2.getChildren().add(educacaoMenu);
noticiaMenu.getChildren().add(noticiaColuna2);
this.menuModel.addSubmenu(noticiaMenu);
}
public MenuModel getMenuModel(){
return menuModel;
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>K19 Treinamentos</title>
</h:head>
<h:body>
<p:megaMenu model="#{megaMenuBean.menuModel}" />
</h:body>
</html>
Upvotes: 0
Views: 1737
Reputation: 336
If someone has the same problem, I had to use DefaultMenuColumn instead of Column.
Upvotes: 0
Reputation: 20691
You should be using org.primefaces.model.menu.DefaultMenuItem
and org.primefaces.model.menu.DefaultSubMenu
instead, as seen on the main menu item page. So what you would have instead is:
DefaultSubMenu esporteMenu = new DefaultSubMenu();
esporteMenu.setLabel("Esportes");
Upvotes: 1