1

典型的な JSF テンプレートのメニュー構造とページがあります。以下は私のメインページのコードです

<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">

<ui:composition template="/templates/internal3section.xhtml">
<ui:define name="events">
    <f:event listener="#{mainBean.entryGate}" type="preRenderView" />
</ui:define>

<ui:define name="headerarea">
<p:panel style="margin:10px;">
    <h:outputText value="WelCome "></h:outputText><br/>
    <h:outputText value="You are using the application to view data for"></h:outputText><br/>
    <p:selectOneMenu value="#{mainBean.selectedId}">
        <p:ajax update=":extPane:content" />
        <f:selectItems value="#{mainBean.ids}" var="id" 
                       itemLabel="#{id.name} 
                       itemValue="#{id.entityId}"/>
    </p:selectOneMenu>
</p:panel>
</ui:define>
<ui:define name="contents">
<h:form id="extPane">
<div>
        <p:menubar style="margin-bottom:5px;">
            <p:menuitem value="Schedule" icon="ui-icon-star" ajax="true"
                actionListener="#{mainBean.setSelectedPage('schedule')}"
                update="content">
            </p:menuitem>
            <p:menuitem value="Assignments" icon="ui-icon-star" ajax="true"
                actionListener="#{mainBean.setSelectedPage('Assignments')}"
                update="content">
            </p:menuitem>
            <p:menuitem value="Write to Us" icon="ui-icon-star" ajax="true"
                actionListener="#{mainBean.setSelectedPage('writetous')}"
                update="content">
            </p:menuitem>
        </p:menubar>
</div>
<div>
<p:panel>
    <p:outputPanel id="content" layout="block" autoupdate="true" style="border-style: none; padding: 0;">
        <c:if test="#{mainBean.selectedPage!=null}">
            <ui:include src="external/#{mainBean.selectedPage}.xhtml" />
        </c:if>
    </p:outputPanel>
</p:panel>  
</div>
</h:form>
</ui:define>

2 つのメニュー タイプがあります。1 つはレポート タイプを変更するもので、もう 1 つはレポート データを変更するものです (エンティティ ID に基づく)。

私のインクルード ページには、最上位の selectOneMenu を使用して、entityId の変更に基づいて更新を処理する preRenderEvent があります。

これが私のインクルードxhtmlの1つのコードです

<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:em="http://java.sun.com/jsf/composite/emcomp"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core">


    <f:event listener="#{noteBean.loadRequests}" type="preRenderView" />

<h:head>
</h:head>
<h:body>
 <div>
 <p:panel header="Send a New Note  for #{mainBean.selectedEntity.name}" id="notePanel" toggleable="TRUE" collapsed="FALSE" >    
...
</p:panel>
</div>
 </h:body>

私の問題は、インクルード ファイルの preRenderView イベントが発生しないことです。ページが初めて表示されたときでも、それらは起動されません。

これが ui:include が ajax リクエストを介して発生しているためかどうかはわかりません。ajaxの更新が発生したときに、ページロードのようなイベントが発生しないと思います。

エンティティの選択に基づいてページ自体を更新する必要があるため、メニュー項目に対して actionEvent を使用できません。したがって、唯一の方法は、イベント preRenderView イベントを発生させることです。

私にお知らせください

  • ui:include ファイルから preRenderView イベントを発生させようとしている方法に問題がある場合。
  • レポートの更新を機能させる他の方法はありますか?
4

0 に答える 0