My code is like:
<?xml version='1.0' encoding='UTF-8' ?>
<!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:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<title>Facelet Title</title>
</h:head>
<f:view contentType="text/html">
<h:body>
<h:form>
<p:menu model="#{menuBean.model}"/>
</h:form>
</h:body>
</f:view>
</html>
My managed bean is like:
@ManagedBean
@RequestScoped
public class MenuBean {
private MenuModel model;
public MenuBean() {
FacesContext facesCtx = FacesContext.getCurrentInstance();
ELContext elCtx = facesCtx.getELContext();
ExpressionFactory expFact = facesCtx.getApplication().getExpressionFactory();
model = new DefaultMenuModel();
Submenu submenu = new Submenu();
submenu.setLabel("Dynamic Submenu 1");
MenuItem item = new MenuItem();
item.setValue("Dynamic Menuitem 1.1");
item.setAjax(false);
item.setActionExpression(expFact.createMethodExpression(elCtx, "#{menuBean.add}", String.class, new Class[0]));
item.setUrl("#");
submenu.getChildren().add(item);
model.addSubmenu(submenu);
submenu = new Submenu();
submenu.setLabel("Dynamic Submenu 2");
item = new MenuItem();
item.setValue("Dynamic Menuitem 2.1");
item.setAjax(false);
item.setActionExpression(expFact.createMethodExpression(elCtx, "#{menuBean.add}", String.class, new Class[0]));
item.setUrl("#");
submenu.getChildren().add(item);
item = new MenuItem();
item.setValue("Dynamic Menuitem 2.2");
item.setAjax(false);
item.setActionExpression(expFact.createMethodExpression(elCtx, "#{menuBean.add}",Void.class, new Class[]{Object.class,String.class}));
item.setUrl("#");
submenu.getChildren().add(item);
model.addSubmenu(submenu);
}
public MenuModel getModel() {
return model;
}
public String add(Object obj,String nodeId) {
return null;
}
}
When running this code when I click on the menu item, the method add() is never executed.
What is the reason?
Which menu item is not calling? In this menu item you set the add method to return a type of String and take no arguments.
In this menu item you say that a method add will return VOID and take an Object and String argument.
You do not have a method add which matches either of these signatures in your ManagedBean class.