1

私はこれに 2 日間苦労しましたが、うまくいきませんでした。もうあなたの助けを求める時が来たと思います。しかし、まず第一に、これは私が使用しているものです:

  • JSF 2 モハラ 2.1.1
  • プライムフェイス 3.4.2
  • ネットビーンズ 7.1.1
  • トムキャット 7.0.37

そして今、問題: 次のように、いくつかの<ui:include .. />タグを使用して他のいくつかのページで構成されるメイン ページがあります。

<ui:composition template="/resources/templates/template1.xhtml">          
    <ui:define name="appData">
        <p:panelGrid columns="1" id="contenidoAplicacion" styleClass="noborder">
            <h:form id="fNewPerson">
                <p:panel header="New employee" style="min-height:40em">
                    <ui:include src="./forms/personal.xhtml" />
                    <p:accordionPanel  styleClass="noborder" activeIndex="3">
                        <p:tab id="tabSomeData" title="Identidad profesional" >
                            <ui:include src="./forms/formSomeData.xhtml" />
                        </p:tab>
                         ....
                         ....
    </ui:define>
</ui:composition> 

personal.xhtm ファイルは次のようになります。

<p:panelGrid>
    <p:row>
        <p:column >
            <h:outputLabel value="Field1"/>
            <p:inputText label="Field1" id="field1" value="#{dataBacking.selectedPerson.field1}" tabindex="1"
                         required="true" size="10" >
                <f:convertNumber for="field1" integerOnly="true" groupingUsed="false"/>
            </p:inputText>
            <p:inputText id="field2" value="#{dataBacking.selectedPerson.field2}" tabindex="2" required="true" size="1" maxlength="1" >
                <p:ajax event="keyup" listener="#{dataBacking.check}" 
                        process="field1 field2" partialSubmit="true" 
                        update="field1 field2 photo"/>
            </p:inputText>
        </p:column>
        <p:column rowspan="5" >
            <p:graphicImage id="photo" value="#{dataBacking.selectedPerson.photo}" width="90" />
        </p:column>
    </p:row>
    ...

</p:panelGrid>

クラスのcheck()メソッドは、とがいくつかのルールを満たしているdataBackingかどうかのみをチェックし、適切に機能するため、無関係です。問題は、メイン ページが初めて読み込まれたときに発生します。その場合、personal.xhtml のコンポーネントは機能しません。ページをリロードする必要があります (単に F5 キーを押すだけです) が、今回は期待どおりに機能します。field1field2<p:ajax />

コンポーネントのいくつかの属性を変更しましたが、何も機能していないようです。他に何をすべきか本当にわかりません。どんな種類の助けも高く評価されます。

編集済みPrimefaces ajax質問のタイトルが示唆しているように、もう1日後、問題はコンポーネントとは何の関係もないと思います。私は次の 2 つの事実からこの結論に達しました。

  • コンポーネントの動作は<f:ajax .../>変わりません。
  • ページを初めてロードしたときのビューが保持されていないことがわかりました。私は自分自身を説明しようとします。

DataBacking クラスはview、ページがユーザーに表示されている間、ページがすべての属性とメソッドを「見る」ことができるようにスコープを定義しています。ただし、コンストラクターが 2 回呼び出されることに気付きました。最初にページが読み込まれたとき (その後、クラスのメソッドがまったく呼び出されなかったとき) と、ページを更新したときです。この最後のケースでは、ページとクラスの両方の動作が期待どおりです。

4

0 に答える 0