JSFページでランダムに重複IDエラーが発生します。すべてのインスタンスで、重複IDは自動生成されたIDです(j_id15など)。
ページ内の指定されたIDに重複はありません。そして、問題は一貫していません。つまり、ページビューは重複IDエラーをスローする可能性があり、次に同じページのリクエストを送信すると、エラーなしでかなりうまく実行されます。これは単一のページに固有のものではありません。プロジェクトには同じ問題のあるさまざまなページがあります。
myfaces2.0.5からmyfaces2.0.14(最新の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>
しかし、問題はまだ解決していません。
このプロジェクトでは、Tomcat6.0で実行されているApacheMyFaces 2.0.14、Facelets 1.1.15、RichFaces3.3.3.Finalを使用しています。