您好,我正在使用默认菜单模型从 ManagedBean 生成 Primefaces 菜单。这是我的代码。
菜单.xhtml
<h:form>
<p:menu model="#{menuProvider.menuModel}"/>
</h:form>
MenuProvider.java
@ManagedBean
@SessionScoped
public class MenuProvider {
MenuModel menuModel;
MenuItem menuPage1,menuPage2,menuPage3,menuPage4;
public MenuProvider() {
menuModel = new DefaultMenuModel();
ExpressionFactory factory = FacesContext.getCurrentInstance().getApplication().getExpressionFactory();
MethodExpression methodExpression = factory.createMethodExpression(FacesContext.getCurrentInstance().getELContext(), "#{menuProvider.myAction('page1')}", Void.class, new Class[]{String.class});
menuPage1 = new MenuItem();
menuPage1.setValue("Page 1");
menuPage1.setId("page1");
menuPage1.setActionExpression(methodExpression);
menuPage1.setUrl("/pages/page1.xhtml");//If i Remove this line then Action listener will work
menuModel.addMenuItem(menuPage1);
System.out.println("MenuModel() called");;
}
public MenuModel getMenuModel() {
return menuModel;
}
public void setMenuModel(MenuModel menuModel) {
this.menuModel = menuModel;
}
public void myAction(String ae)
{
System.out.println("Listener---");
System.out.println(ae);
}
}
我的问题是上面代码中的菜单项对象只有一个,
如果我删除 setUrl() 方法, setActionExpression() 将起作用。
如果我保留 serUrl() 方法, setActionExpression() 将不起作用。
有什么具体原因吗?还是我错过了什么。?
编辑我正在使用 Primefaces 3.5