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>

我有两种菜单类型,一种更改报告类型,另一种更改报告数据(基于实体 ID)。

我的包含页面有 preRenderEvent 来处理基于使用顶部 selectOneMenu 更改 entityId 的更新。

这是我的一个包含 xhtml 的代码

<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