[RESOLVIDO] Erro Menu Dinamico

Olá

Estou começando a trabalhar com JSF e estou tendo problemas na geração de menus dinâmicos.

Este é o erro que está ocorrendo:

WARNING: executePhase(RENDER_RESPONSE 6,com.sun.faces.context.FacesContextImpl@126c885) threw exception java.lang.IllegalArgumentException: Value binding of UINavigationMenuItem with id j_id___jsp_tag_ctru1:menu:j_id___jsp_tag_ctru1pc2:id_menu1 does not reference an Object of type NavigationMenuItem at org.apache.myfaces.custom.navmenu.NavigationMenuUtils.getNavigationMenuItemList(NavigationMenuUtils.java:58) at org.apache.myfaces.custom.navmenu.jscookmenu.HtmlJSCookMenuRenderer.encodeChildren(HtmlJSCookMenuRenderer.java:156) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886) at javax.faces.render.Renderer.encodeChildren(Renderer.java:137) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892) at javax.faces.render.Renderer.encodeChildren(Renderer.java:137) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892) at com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:244) at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:175) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245) at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65) at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147) at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:613) at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:362) at com.evermind.server.http.HttpRequestHandler.doDispatchRequest(HttpRequestHandler.java:915) at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:821) at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:626) at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:599) at com.evermind.server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:383) at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:161) at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:142) at oracle.oc4j.network.ServerSocketReadHandler$ClientRunnable.run(ServerSocketReadHandler.java:275) at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket(ServerSocketAcceptHandler.java:237) at oracle.oc4j.network.ServerSocketAcceptHandler.access$800(ServerSocketAcceptHandler.java:29) at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run(ServerSocketAcceptHandler.java:878) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675) at java.lang.Thread.run(Thread.java:595)

Eu utilizo JSF + Tomahawk(jscookMenu) rodando pelo OC4J com a IDE JDeveloper.

abaixo segue minhas classes:

minha subview com o menu

[code]<%@ page contentType=“text/html;charset=windows-1252”%>
<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h”%>
<%@ taglib uri=“http://java.sun.com/jsf/core” prefix=“f”%>
<%@ taglib uri=“http://myfaces.apache.org/tomahawk” prefix=“t”%>

<f:subview id=“menu”>
<h:form>

<t:jscookMenu layout=“hbr” theme=“ThemeOffice” styleLocation="/css">
<t:navigationMenuItem id=“id_menu1” value="#{menu.navItems}"/>
</t:jscookMenu>
</h:form>
</f:subview>[/code]

meu managedBean

[code]package br.com.metaway.backedbean;

import org.apache.myfaces.custom.navmenu.NavigationMenuItem;

public class DynamicMenuTest {
private NavigationMenuItem[] navItems;

public DynamicMenuTest() {
    // children for item 2
    NavigationMenuItem[] subItems = new NavigationMenuItem[2];
    subItems[0] = new NavigationMenuItem("Subitem 2_1 Label","#{pessoaCad.actionListaTodos}");
    subItems[1] = new NavigationMenuItem("Subitem 2_2 Label","#{cidadeCad.actionTodos}");
    // item 2
    NavigationMenuItem itemWithChildren = new NavigationMenuItem("Item 2 Label", "");
    itemWithChildren.setNavigationMenuItems(subItems);
    // root items
    navItems = new NavigationMenuItem[3];
    navItems[0] = new NavigationMenuItem("Item 1 Label","");
    navItems[1] = itemWithChildren;
    navItems[2] = new NavigationMenuItem("Item 3 Label","");
}

public NavigationMenuItem[] getNavItems() {
    return navItems;
}

public void setNavItems(NavigationMenuItem[] navItems) {
    this.navItems = navItems;
}

}[/code]

meu arquivo faces-config.xml

[code]<?xml version="1.0" encoding="UTF-8"?>

<application>
    <el-resolver>org.springframework.web.jsf.el.DelegatingFacesELResolver</el-resolver>
</application>
    
<managed-bean>
    <managed-bean-name>pessoaCad</managed-bean-name>
    <managed-bean-class>br.com.metaway.backedbean.CadPessoa</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    <managed-property>
        <property-name>pessoaDAO</property-name>
        <property-class>br.com.metaway.model.dao.PesDAO</property-class>
        <value>#{pDAOImpl}</value>
    </managed-property>
    <managed-property>
        <property-name>cidadeDAO</property-name>
        <property-class>br.com.metaway.model.dao.CidDAO</property-class>
        <value>#{cidDAOImpl}</value>
    </managed-property>
</managed-bean>    

<managed-bean>
    <managed-bean-name>cidadeCad</managed-bean-name>
    <managed-bean-class>br.com.metaway.backedbean.CadCidade</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    <managed-property>
        <property-name>cidadeDAO</property-name>
        <property-class>br.com.metaway.model.dao.CidDAO</property-class>
        <value>#{cidDAOImpl}</value>
    </managed-property>
</managed-bean>

<managed-bean>
    <managed-bean-name>menu</managed-bean-name>
    <managed-bean-class>br.com.metaway.backedbean.DynamicMenuTest</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

<navigation-rule>
    <from-view-id>/*</from-view-id>
    <navigation-case>
        <from-outcome>login</from-outcome>
        <to-view-id>/TelaIni.jsf</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>listar</from-outcome>
        <to-view-id>/TelaPes.jsf</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>cadastro</from-outcome>
        <to-view-id>/PesCad.jsf</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>listacid</from-outcome>
        <to-view-id>/TelaCid.jsf</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>cadcid</from-outcome>
        <to-view-id>/CidCad.jsf</to-view-id>
    </navigation-case>
</navigation-rule>

[/code]

A página que ira mostrar o menu

[code]<%@ page contentType=“text/html;charset=windows-1252”%>
<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h”%>
<%@ taglib uri=“http://java.sun.com/jsf/core” prefix=“f”%>

<f:view>

TelaIni

[/code]

Meu arquivo web.xml

[code]<?xml version = '1.0' encoding = 'UTF-8'?>


org.springframework.web.context.ContextLoaderListener

<context-param>
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:/applicationContext.xml</param-value> 
</context-param>
    
<!-- Extensions Filter -->  
<filter>  
    <filter-name>MyFacesExtensionsFilter</filter-name>  
    <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>  
    <init-param>  
        <param-name>maxFileSize</param-name>  
        <param-value>20m</param-value>  
    </init-param>  
</filter>  

<filter-mapping>  
    <filter-name>MyFacesExtensionsFilter</filter-name>  
    <servlet-name>Faces Servlet</servlet-name>  
</filter-mapping>  

<filter-mapping>  
    <filter-name>MyFacesExtensionsFilter</filter-name>  
    <url-pattern>/faces/myFacesExtensionResource/*</url-pattern>  
</filter-mapping>  
         
<servlet>
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping>

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

[/code]

Se alguém tiver alguma dica ou solução para isso…

obrigada

Jaque

E erro estava na página jsp do subview (linha 10 d0 código).
O correto é:

1. <%@ page contentType="text/html;charset=windows-1252"%> 2. <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> 3. <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> 4. <%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%> 5. 6. <f:subview id="menu"> 7. <h:form> 8. <input type="hidden" name="jscook_action" id="jscook_action"/> 9. <t:jscookMenu layout="hbr" theme="ThemeOffice" styleLocation="/css"> 10. <t:navigationMenuItems value="#{menu.navItems}"/> 11. </t:jscookMenu> 12. </h:form> 13. </f:subview>