9 Replies Latest reply on Apr 7, 2009 5:32 AM by Nick Belaevski

    Create menuitem dynamically

    abid zaid Newbie

      Hi All,
      I create a menu, with menuitem as follow:

      <rich:dropDownMenu>
       <rich:menuItem action="roleList"></rich:menuItem>
      </rich:dropDownMenu>
      

      Now I want to be able to add the same thing dynamically. I get an error once I try to assign the action. Any solution please?
      Thanks

        • 1. Re: Create menuitem dynamically
          Nick Belaevski Master

          Hello,

          What error?
          How do you assign action?
          Why not use c:forEach?

          • 2. Re: Create menuitem dynamically
            abid zaid Newbie

             

            "nbelaevski" wrote:
            Hello,

            What error?
            How do you assign action?
            Why not use c:forEach?

            k =new HtmlMenuItem();
            Application app=FacesContext.getCurrentInstance().getApplication();
            MethodBinding mb=app.createMethodBinding("listRoles", null);
            k.setActionListener(mb);
            

            the error is below
            Error Rendering View[/file.xhtml]
            javax.faces.FacesException: javax.faces.FacesException: javax.faces.FacesException: Cant instantiate class: richMenu.. class richMenu : javax.faces.el.ReferenceSyntaxException: listRoles
            at com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:223)
            at com.sun.facelets.tag.jsf.ComponentHandler.createComponent(ComponentHandler.java:224)
            at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:139)
            at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
            at com.sun.facelets.tag.jsf.ComponentHandler.applyNextHandler(ComponentHandler.java:314)
            at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:169)
            at com.sun.facelets.tag.jsf.ComponentHandler.applyNextHandler(ComponentHandler.java:314)
            at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:169)
            at com.sun.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:109)
            at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
            at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
            at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
            at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:25)
            at com.sun.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:95)
            at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:524)
            at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:567)
            at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
            at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:196)
            at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
            at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:248)
            at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
            at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:177)
            at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:267)
            at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:380)
            at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:507)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at com.masjid.bader.persistence.session.HttpRequestFilter.doFilter(HttpRequestFilter.java:49)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:301)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at com.masjid.bader.security.SecurityFilter.doFilter(SecurityFilter.java:79)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
            at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
            at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
            at java.lang.Thread.run(Unknown Source)
            Caused by: javax.faces.FacesException: javax.faces.FacesException: Cant instantiate class: richMenu.. class richMenu : javax.faces.el.ReferenceSyntaxException: listRoles
            at com.sun.faces.application.ApplicationAssociate.createAndMaybeStoreManagedBeans(ApplicationAssociate.java:503)
            at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:82)
            at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
            at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
            at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
            at org.apache.el.parser.AstValue.getValue(AstValue.java:107)
            at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
            at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
            at com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:212)

            • 3. Re: Create menuitem dynamically
              abid zaid Newbie

               

              "nbelaevski" wrote:
              Hello,
              Why not use c:forEach?

              The menu is built in a backing bean depending on the privileges of the logged user

              • 4. Re: Create menuitem dynamically
                Nick Belaevski Master

                1. You should use setAction() and not setActionListener()

                2. What is richMenu class and how does it correspond to "listRoles"?

                • 5. Re: Create menuitem dynamically
                  abid zaid Newbie

                   

                  "nbelaevski" wrote:
                  1. You should use setAction() and not setActionListener()

                  2. What is richMenu class and how does it correspond to "listRoles"?

                  listRoles is just the outcome that will navigate me to the rolelist page.
                  richMenu class returns and instance of htmlToolBar to my page.
                  I worked with setAction and it works fine when I provide a bean method such as the following:
                  MethodBinding mb=app.createMethodBinding("#{mybean.help}");
                  

                  The error happens when I use the following:
                  MethodBinding mb=app.createMethodBinding("listRoles", null);
                  

                  Or
                  MethodBinding mb=app.createMethodBinding("listRoles");
                  

                  Now my question is there anyway I can set the action without providing a method binding?
                  Or is there anyway I can just navigate to rolelist page from the "ListRoles" outcome?


                  • 6. Re: Create menuitem dynamically
                    Nick Belaevski Master

                    Try this:

                    commandLink.setActionExpression(facesContext.getApplication().getExpressionFactory().createMethodExpression(facesContext.getELContext(), "listRoles", String.class, new Class[0]));


                    • 7. Re: Create menuitem dynamically
                      abid zaid Newbie

                       

                      "nbelaevski" wrote:
                      Try this:
                      commandLink.setActionExpression(facesContext.getApplication().getExpressionFactory().createMethodExpression(facesContext.getELContext(), "listRoles", String.class, new Class[0]));

                      I could not implement this code with richfaces. I do not have the seactionexpression method

                      • 8. Re: Create menuitem dynamically
                        Ilya Shaikovsky Master

                        checked.

                         HtmlMenuItem item = new HtmlMenuItem();
                         item.setActionExpression(actionExpression);
                        

                        should works. All such our components are the same as standard JSF h:command.

                        • 9. Re: Create menuitem dynamically
                          Nick Belaevski Master

                          Are you using JSF 1.1?