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
<%@ 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>
<input type="hidden" name="jscook_action" id="jscook_action"/>
<t:jscookMenu layout="hbr" theme="ThemeOffice" styleLocation="/css">
<t:navigationMenuItem id="id_menu1" value="#{menu.navItems}"/>
</t:jscookMenu>
</h:form>
</f:subview>
meu managedBean
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;
}
}
meu arquivo faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/JSF/Configuration">
<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>
</faces-config>
A página que ira mostrar o menu
<%@ 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>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=windows-1252"/>
<link href="css/style.css" rel="stylesheet" type="text/css" />
<script src="js/utils.js" type="text/javascript" ></script>
<title>TelaIni</title>
</head>
<body>
<h:form>
<table>
<tr>
<td width="100%" align="left" height="10px" colspan="2">
<jsp:include page="/menu.jsp" flush="true"/>
</td>
</tr>
</table>
<p>
<h:commandButton value="Pessoas" action="#{pessoaCad.actionListaTodos}"/>
<h:commandButton value="Cidades" action="#{cidadeCad.actionTodos}"/>
</p>
</h:form>
</body>
</html>
</f:view>
Meu arquivo web.xml
<?xml version = '1.0' encoding = 'UTF-8'?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<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>
</web-app>
Se alguém tiver alguma dica ou solução para isso....
obrigada
Jaque