在MenuItem对象上使用setActionExpression()和setUrl()都不起作用?

时间:2013-05-08 09:39:47

标签: jsf primefaces

您好我正在使用默认菜单模型从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

1 个答案:

答案 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 actionlistenera发布表单。

您希望在此类上下文中使用 来执行业务操作,并在需要时可能使用必要的导航发布一些数据。要背诵展示示例:

href="#"

当你第一次参加它时,它会有些混乱。但是,当您尝试更深入地理解这类事物时,您将轻松掌握所背后的逻辑,并相应地使用input type="submit"组件。