0

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 のみが表示されます。しかし、タブ内またはタブ間で他のページに問題がないので、それは問題ではないと思います。

ここで何が問題であるか、および潜在的な修正を提案してください。

4

0 に答える 0