程序化PrimeFaces菜单栏在MyFaces中不起作用,但在Mojarra中起作用

时间:2012-05-31 10:59:11

标签: jsf-2 primefaces myfaces

我尝试实现一个程序化的菜单栏,其中item元素调用方法抛出一个actionListener。这不适用于myfaces 2.1.6,但它适用于mojarra 2.1.8。我的代码有错误吗? myfaces中有一个错误?

这是我的代码:

XHTML

        <h:form>
            <p:tabView id="head" dynamic="true" cache="true" style="width:972px;">
                <p:tab id="tab1" title="Config">
                </p:tab>
                <p:tab id="tab2" title="Result">
                    <p:menubar model="#{someBean.menu}" autoDisplay="false" />
                </p:tab>
            </p:tabView>
        </h:form>

bean java

public MenuBean() {
        FacesContext facesCtx = FacesContext.getCurrentInstance();
        ELContext elCtx = facesCtx.getELContext();
        ExpressionFactory expFact = facesCtx.getApplication().getExpressionFactory();

        menu = new DefaultMenuModel();

        Submenu submenu = new Submenu();
        submenu.setLabel("Dynamic Submenu 1");

        MenuItem item = new MenuItem();
        item.setValue("Dynamic Menuitem 1.1");
        item.setId("item1");
        item.setAjax(false);
        MethodExpression actionListener = expFact.createMethodExpression(elCtx, "#{someBean.hello}", null, new Class[] { ActionEvent.class });
        item.addActionListener(new MethodExpressionActionListener(actionListener));

        submenu.getChildren().add(item);

        menu.addSubmenu(submenu);

        submenu = new Submenu();
        submenu.setLabel("Dynamic Submenu 2");
        item = new MenuItem();
        item.setValue("Dynamic Menuitem 2.1");
        item.setAjax(false);
        item.setId("ite3");
         actionListener = expFact.createMethodExpression(elCtx, "#{someBean.hello}", null, new Class[] { ActionEvent.class });
        item.addActionListener(new MethodExpressionActionListener(actionListener));

        submenu.getChildren().add(item);

        menu.addSubmenu(submenu);}
        public void hello(ActionEvent event) {  System.out.println("hola2");}

有什么建议吗?或者从MyFaces改为Mojarra

0 个答案:

没有答案