3

こんにちは私はこの問題で一日中頭を打っています、そして私はそれについて何をすべきかわかりません、そして私はこのフォーラムの誰かが私を助けることができることを望んでいます。

dataTable要素を使用してスタンドアロンページをレンダリングすると、並べ替え、ナビゲーションなど、すべてのAjax機能が機能します。

しかし、「ui:include」タグを介して別のページ内にdataTable要素を含む同じページを含めると、テーブルはレンダリングされますが、すべてのAjax機能が失われます。

これが私の「p:dataTable」ページのコードです:

    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets">
        <p:dataTable id="dataTable"
                     var="alarm" 
                     value="#{alarmsBean.alarms}"
                     paginator="true" rows="10"
                     paginatorTemplate="{FirstPageLink} {PreviousPageLink} {NextPageLink} {LastPageLink}"
                     paginatorPosition="bottom">
            <f:facet name="header">
                Alarms
            </f:facet>
            <p:column id="deviceHeader" sortBy="#{alarm.device}">
                <f:facet name="header">
                    <h:outputText value="Device" />
                </f:facet>
                <h:outputText value="#{alarm.device}" />
            </p:column>
            <p:column sortBy="#{alarm.alarm}">
                <f:facet name="header">
                    <h:outputText value="Alarm" />
                </f:facet>
                <h:outputText value="#{alarm.alarm}" />
            </p:column>            
            <p:column sortBy="#{alarm.managedObject}">
                <f:facet name="header">
                    <h:outputText value="Managed Object" />
                </f:facet>
                <h:outputText value="#{alarm.managedObject}" />
            </p:column>            
            <p:column sortBy="#{alarm.alarmTime}">
                <f:facet name="header">
                    <h:outputText value="Alarm Time" />
                </f:facet>
                <h:outputText value="#{alarm.alarmTime}" />
            </p:column>            
            <p:column sortBy="#{alarm.severity}">
                <f:facet name="header">
                    <h:outputText value="Severity" />
                </f:facet>
                <h:outputText value="#{alarm.severity}" />
            </p:column>            
            <p:column sortBy="#{alarm.message}">
                <f:facet name="header">
                    <h:outputText value="Message" />
                </f:facet>
                <h:outputText value="#{alarm.message}" />
            </p:column>
        </p:dataTable>
    </ui:composition>

そして、これがそのページを含む他のページのセクションです:

    <h:form id="mainF">
      <pe:layoutPane id="center" position="center">
          <h:panelGroup id="centerContent">
              <ui:include src="#{navigationBean.pageName}.xhtml" />
          </h:panelGroup>
      </pe:layoutPane>
    </h:form>

私は何を間違っているのですか、それともこれはPrimeFaces 3.3のバグですか?

4

1 に答える 1

2
<ui:include src="#{navigationBean.pageName}.xhtml" />

(ajax) フォーム送信の処理中に、最初のページが表示されたときとまったく同じ#{navigationBean.pageName}値を返すことを確認する必要があります。そうでない場合、JSF は (ajax) フォーム送信に関連する入力およびコマンド コンポーネントを見つけることができません。

したがって、その値が要求ベースのパラメーター/変数に依存する場合は、この要求パラメーター/変数がフォーム送信全体で保持され、Bean の (ポスト) 構築中に使用できるようにする必要があります。<f:param>コマンドボタンのように渡し、 として設定することで実現できます@ManagedProperty。Bean をビュー スコープに配置して<ui:include src>も、ビュー ビルド時のタグとして独自の新しいインスタンスが取得されるため、機能しないことに注意してください。部分的な状態の保存をオフにするか、JSF 2.2 にアップグレードする必要があります。

以下も参照してください。

于 2012-06-18T21:43:28.417 に答える