PrimeFaces3.3、MyFaces+CODI、OpenWebBeans、および Tomcat7 を使用して JSF Web アプリケーションを開発しています。
特定のページ (後続のすべてのページ アクション) を表示した後、ID の重複エラーが発生します。デバッグでviewrootを分析したところ、重複するIDは実際には見つかりませんでしたが、「WindowContextIdHolderComponent」には重複としてスローされるID(j_id6)があることがわかりました。
PARTIAL_STATE_SAVING を「true」にして以来、この問題が発生し始めました。
タブを持つメインビューがあり、各タブにはメニューがあり、各メニューアクションはタブでページをロードします
以下は、私のアプリケーションのコードと構造です。
メインページ
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<ui:composition template="/templates/simple3section.xhtml">
<ui:define name="headerarea">
Banner Comes Here
</ui:define>
<ui:define name="contents">
<p:tabView dynamic="false" cache="false" id="mainTab">
<p:tab title="Home">
<ui:include src="employeehome.xhtml" />
</p:tab>
<p:tab title="Academics">
<ui:include src="academicmain.xhtml" />
</p:tab>
<p:tab title="Transport">
<ui:include src="transportmain.xhtml" />
</p:tab>
<p:tab title="Administration">
<ui:include src="adminmain.xhtml" />
</p:tab>
<p:tab title="Finance" disabled="true">
<ui:include src="financemain.xhtml" />
</p:tab>
<p:tab title="Shop" >
<ui:include src="shopmain.xhtml" />
</p:tab>
</p:tabView>
</ui:define>
</ui:composition>
</html>
Adminmain.xhtml ページ (タブ ページ)
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
</h:head>
<h:body>
<div>
<h:form>
<p:menubar style="margin-bottom:5px;">
<p:menuitem value="Employees" icon="ui-icon-star" ajax="true"
actionListener="#{homeNavigationBean.setAdminPage('employeeinfo')}"
update=":mainTab:adminContent">
</p:menuitem>
<p:menuitem value="Employee Authorization" icon="ui-icon-star" ajax="true"
actionListener="#{homeNavigationBean.setAdminPage('authorization')}"
update=":mainTab:adminContent">
</p:menuitem>
<p:menuitem value="Notices" icon="ui-icon-star" ajax="true"
action="#{homeNavigationBean.setAdminPage('notices')}"
actionListener="#{noticesBean.loadNotices(false)}"
update=":mainTab:adminContent">
</p:menuitem>
<p:menuitem id="updgallery" value="Gallery" icon="ui-icon-star" ajax="true"
actionListener="#{homeNavigationBean.setAdminPage('adminGallery')}"
update=":mainTab:adminContent">
</p:menuitem>
<p:menuitem value="Location" icon="ui-icon-star" ajax="true"
action="#{homeNavigationBean.setAdminPage('location')}"
actionListener="#{locationBean.loadLocation}"
update=":mainTab:adminContent">
</p:menuitem>
<p:menuitem value="Department" icon="ui-icon-star" ajax="true"
action="#{homeNavigationBean.setAdminPage('department')}"
actionListener="#{departmentBean.loadDepartment}"
update=":mainTab:adminContent">
</p:menuitem>
</p:menubar>
</h:form>
</div>
<div>
<p:outputPanel id="adminContent" layout="block" style="border-style: none; padding: 0;">
<ui:include src="admin/#{homeNavigationBean.adminPage}.xhtml" />
</p:outputPanel>
</div>
</h:body>
</html>
以下は、重複IDエラーを引き起こすadminGalleryページです(他のすべてのページにはこの問題はありません)
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
</h:head>
<h:body>
<p:panelGrid style="width:98%;">
<f:facet name="header">
<p:row>
<p:column colspan="2">
<h:outputText value="Image Gallary"></h:outputText>
</p:column>
</p:row>
</f:facet>
<p:row>
<p:column style="width:200px;vertical-align:top">
<h:form id="nodeForm">
<p:tree id="nodeTree" value="#{galleryBean.imageTree}" var="node"
selectionMode="single" selection="#{galleryBean.selectedNode}"
style="width:160px;border-style:none;padding:0;margin:0;">
<p:ajax event="select" listener="#{galleryBean.loadImages}"
update=":mainTab:imageForm:galaPanel" />
<p:treeNode id="treeNode">
<h:outputText value="#{node}"></h:outputText>
</p:treeNode>
</p:tree>
</h:form>
</p:column>
<p:column>
<h:form id="imageForm">
<p:outputPanel id="galaPanel">
<p:galleria var="image" id="imgGala"
value="#{galleryBean.imageList}" panelWidth="470"
style="padding:0;margin:0;">
<p:graphicImage value="#{imageHelper.getFilePhotoStream()}"
width="450">
<f:param name="imageName" value="#{image}" />
</p:graphicImage>
</p:galleria>
</p:outputPanel>
</h:form>
</p:column>
</p:row>
<p:row>
<p:column>
<h:form id="nodeAddForm">
<p:messages id="treemsgs" style="padding:0;margin:0;" />
<p:panelGrid columns="2" style="width:100%">
<h:outputText value="Name:*" />
<p:inputText id="nodename" value="#{galleryBean.name}"
label="Node Name" />
<h:outputText value="External Visible:" />
<p:selectBooleanCheckbox id="extcheck"
value="#{galleryBean.externalvisible}" />
<f:facet name="footer">
<p:commandButton type="Submit" value="Add New Node"
actionListener="#{galleryBean.addImageNode}" ajax="true"
process="nodename extcheck" update=":mainTab:nodeForm:nodeTree treemsgs" />
</f:facet>
</p:panelGrid>
</h:form>
</p:column>
<p:column>
<h:form id="imageAddForm">
<p:messages id="imgmsgs" />
<p:fileUpload mode="advanced"
fileUploadListener="#{galleryBean.addPhotoFile}"
allowTypes="/(\.|\/)(gif|jpe?g)$/" sizeLimit="1000000"
invalidSizeMessage="Please limit photo size to 1000Kb"
update=":mainTab:imageForm:galaPanel imgmsgs" />
</h:form>
</p:column>
</p:row>
</p:panelGrid>
<p:spacer height="20"/>
</h:body>
</html>
このページは正しく表示されますが、このページの表示後のすべてのリクエストは重複 ID エラーで失敗します。
私のBeanはCODI WindowScopedです。
Duplicate Id に関するさまざまな提案された回答に基づいて、問題の潜在的な原因として ui:include のみが表示されます。しかし、タブ内またはタブ間で他のページに問題がないので、それは問題ではないと思います。
ここで何が問題であるか、および潜在的な修正を提案してください。