2015-09-21 35 views
0

我在WildFly 8.2.0上使用Tomahawk20 1.1.14來實現JSF 2.0。當使用<t:panelNagivation2>,下面的異常被拋出:<t:panelNavigation2>導致javax.faces.FacesException:無法添加相同的組件兩次

javax.faces.FacesException: Cannot add the same component twice 

這是怎麼造成的,我該如何解決呢? 這裏是堆棧跟蹤:

Caused by: javax.faces.FacesException: Cannot add the same component twice: nav:panel-nav:nav_panel-nav_uinavmitem1 
    at com.sun.faces.context.StateContext$DynamicAddRemoveListener.handleAddRemoveWithAutoPrune(StateContext.java:751) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.context.StateContext$DynamicAddRemoveListener.handleAdd(StateContext.java:678) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.context.StateContext$AddRemoveListener.processEvent(StateContext.java:352) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.context.StateContext$DynamicAddRemoveListener.processEvent(StateContext.java:568) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at javax.faces.event.SystemEvent.processListener(SystemEvent.java:108) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.event.ComponentSystemEvent.processListener(ComponentSystemEvent.java:118) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at com.sun.faces.application.ApplicationImpl.processListenersAccountingForAdds(ApplicationImpl.java:2239) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.application.ApplicationImpl.invokeViewListenersFor(ApplicationImpl.java:2057) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:292) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:247) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at org.jboss.as.jsf.injection.weld.ForwardingApplication.publishEvent(ForwardingApplication.java:299) [wildfly-jsf-injection-8.2.0.Final.jar:8.2.0.Final] 
    at javax.faces.component.UIComponentBase.publishAfterViewEvents(UIComponentBase.java:2253) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.component.UIComponentBase.doPostAddProcessing(UIComponentBase.java:1934) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.component.UIComponentBase.setParent(UIComponentBase.java:447) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at org.apache.myfaces.custom.navmenu.htmlnavmenu.HtmlNavigationMenuRenderer.addUINavigationMenuItems(HtmlNavigationMenuRenderer.java:355) [tomahawk20-1.1.14.jar:1.1.14] 
    at org.apache.myfaces.custom.navmenu.htmlnavmenu.HtmlNavigationMenuRenderer.preprocessNavigationItems(HtmlNavigationMenuRenderer.java:340) [tomahawk20-1.1.14.jar:1.1.14] 
    at org.apache.myfaces.custom.navmenu.htmlnavmenu.HtmlNavigationMenuRenderer.encodeEnd(HtmlNavigationMenuRenderer.java:175) [tomahawk20-1.1.14.jar:1.1.14] 
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:176) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at org.apache.myfaces.tomahawk.application.ResourceViewHandlerWrapper.renderView(ResourceViewHandlerWrapper.java:169) [tomahawk20-1.1.14.jar:1.1.14] 
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) [jsf-impl-2.2.8-jbossorg-1.jar:] 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8] 
    ... 20 more 

降級Wildfly使用JSF 2.1.29-04(這是最新的2.1.x版本)引發以下錯誤:

Caused by: java.lang.ClassNotFoundException: javax.faces.view.ViewScoped from [Module "org.jboss.as.jsf:main" from local module loader @15b3e5b (finder: local module finder @61ca2dfa (roots: /wildfly_8.2.0_final_acd/wildfly_8.2.0_final_acd/modules,/wildfly_8.2.0_final_acd/wildfly_8.2.0_final_acd/modules/system/layers/base))] 
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) 
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) 
... 24 more 

而且在效果類

javax.faces.view.ViewScoped 

缺少在JSF-api.jar中

+0

您忘記了包含堆棧跟蹤。它通常包含答案。 – BalusC

+0

堆棧跟蹤現在存在。 – edmond

+0

這似乎是JSF 2.0舊版戰斧中的一個bug,它只在使用JSF 2.2時纔會公開。嘗試按照[這些說明]將WildFly降級到Mojarra 2.1.x,然後重新測試(http://stackoverflow.com/questions/17085717/upgrade-jsf-mojarra-in-jboss-as-eap-wildfly)。 – BalusC

回答

0

戰斧FO JSF 2.0與JSF 2.2不完全兼容。某些組件可能有效,但其他組件可能無法使用。 <t:panelNavigation2>就是這樣的。您遇到的異常是動態組件樹操作中的一個錯誤(之前用於跟蹤編程組件樹更改中的舊JSF 1.x錯誤)的後果。

你有2種選擇:

  1. 下調至2.1 JSF/2.0。您可以使用與此處所解釋的相同的指令:Upgrade JSF/Mojarra in JBoss AS/EAP/WildFly您顯然只會錯過JSF 2.2的特定功能。

  2. 或者放下戰斧。 MyFaces停止了Tomahawk的開發(至少,它不再被維護多年)。標準JSF已經接管了很多實用程序/增強功能。對於可視化組件,尋找另一個UI組件庫,如PrimeFaces,或只使用「純香草」 HTML/CSS(如果不考慮IE6/7支持的瀏覽器,然後進入菜單項與<ul><li>比較瑣碎和一點點CSS)。

+0

該建議是相當有幫助的。這就是我解決問題的方法。 1)設置context-param org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL爲true。 2)在戰爭的WEB-INF/libs中使用tomahawk21-1.1.14.jar,jsf-api-2.1.0.jar和jaf-impl-2.1.0.jar。網絡應用程序現在開始並且可以顯示index.xhtml頁面。我現在有另一個問題。綁定到來自tomahawk的t:panelNavigation2構建的菜單項的actionlistener不會被觸發。 – edmond

相關問題