您好我正在使用默认菜单模型从ManagedBean生成Primefaces菜单。 这是我的代码。
名为menu.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
答案 0 :(得分:2)
<p:menuitem>
(showcase example)的使用是双重的。基本上,两个用例都是我所知道的互斥,这得到了逻辑分析的很好支持。
<p:menuitem>
充当普通的获取链接在这个用例中,<p:menuitem>
基本上是一个简单的导航链接,如果指定了<h:link>
,那么outcome
的味道很多,<h:outputLink>
如果{{1}指定。您无法将侦听器附加到该类链接。基本上生成具有指定url
的简单a
元素。
您希望在此类上下文中使用 进行导航,以创建导航菜单。要背诵展示示例:
href
<p:menu>
<p:submenu label="Navigations">
<p:menuitem value="External" url="http://www.primefaces.org" icon="ui-icon-home"/>
<p:menuitem value="Internal" outcome="/mobile/index" icon="ui-icon-star"/>
</p:submenu>
</p:menu>
充当执行业务操作的手段在这个用例中,<p:menuitem>
基本上充当一个命令组件,提交表单并执行业务操作,与<p:menuitem>
/ <h:commandLink>
的风格大致相同{{1} }和<h:commandButton>
属性。您无法将您的网址附加到命令链接/按钮。它们基本上会生成action
元素,通过JavaScript actionlistener
或a
发布表单。
您希望在此类上下文中使用 来执行业务操作,并在需要时可能使用必要的导航发布一些数据。要背诵展示示例:
href="#"
当你第一次参加它时,它会有些混乱。但是,当您尝试更深入地理解这类事物时,您将轻松掌握所背后的逻辑,并相应地使用input type="submit"
组件。