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