2012-08-06 78 views
1

我的JSF頁面中隨機出現重複ID錯誤,並且在所有實例中,重複的ID都是自動生成的ID(如j_id15)。自動生成的JSF組件ID中存在重複的ID

我沒有在頁面中指定的ID的任何重複。這個問題並不一致,我的意思是,頁面視圖可以拋出重複的ID錯誤,並且下一次我發送同一頁面的請求時,它運行得很好,沒有任何錯誤。這不是特定於單個頁面,我在我的項目中有不同的頁面,具有相同的問題。

問題開始從MyFaces的2.0.5升級到2.0.14的MyFaces(最新的2.0.x版本)

這是MyFaces實現中的錯誤後顯示?或者我做錯了什麼?

堆棧跟蹤如下所示:

Caused by: java.lang.IllegalStateException: Client-id : j_id15 is duplicated in the faces tree. Component : posSelectionFrm:posSelSubview_first:posHasAccessTable:j_id15, path: ...[Class: javax.faces.component.UINamingContainer,Id: posSelSubview_first][Class: javax.faces.component.html.HtmlDataTable,Id: posHasAccessTable][Class: javax.faces.component.UIColumn,Id: titleColumn2][Class: com.sun.facelets.compiler.UIInstructions,Id: j_id15]} 
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:280) 
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302) 
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302) 
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302) 
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302) 
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302) 
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302) 
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302) 
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302) 
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302) 
at org.apache.myfaces.application.StateManagerImpl.saveView(StateManagerImpl.java:220) 
at javax.faces.application.StateManager.saveSerializedView(StateManager.java:113) 
at javax.faces.application.StateManagerWrapper.saveSerializedView(StateManagerWrapper.java:41) 
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:617) 
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100) 
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176) 
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:116) 
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191) 
... 71 more 

而且,我實現了MyFaces的是不應該重複檢查由默認的自動生成的ID。但是,爲了確保,我在web.xml中定義如下設置:

<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Production</param-value> 
</context-param> 

<context-param> 
    <param-name>org.apache.myfaces.CHECK_ID_PRODUCTION_MODE</param-name> 
    <param-value>false</param-value> 
</context-param> 

但問題仍然存在。

該項目使用運行在Tomcat 6.0上的Apache MyFaces 2.0.14,Facelets 1.1.15,RichFaces 3.3.3.Final。

+0

您最好爲您在頁面中使用的所有組件提供id。 – 2018-02-08 03:21:14

回答

0

在web.xml文件衝突中定義了不同過濾器的一些問題。因此,檢查RichFaces過濾器必須是web.xml配置文件中其他過濾器中的第一個過濾器。

+0

不,richfaces過濾器是第一個(在我自己的過濾器之後,我沒有做任何特別的事情,比如設置編碼或生成日誌消息) – Iravanchi 2012-08-06 13:44:51