私はこれに 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 キーを押すだけです) が、今回は期待どおりに機能します。field1
field2
<p:ajax />
コンポーネントのいくつかの属性を変更しましたが、何も機能していないようです。他に何をすべきか本当にわかりません。どんな種類の助けも高く評価されます。
編集済み。Primefaces ajax
質問のタイトルが示唆しているように、もう1日後、問題はコンポーネントとは何の関係もないと思います。私は次の 2 つの事実からこの結論に達しました。
- コンポーネントの動作は
<f:ajax .../>
変わりません。 - ページを初めてロードしたときのビューが保持されていないことがわかりました。私は自分自身を説明しようとします。
DataBacking クラスはview
、ページがユーザーに表示されている間、ページがすべての属性とメソッドを「見る」ことができるようにスコープを定義しています。ただし、コンストラクターが 2 回呼び出されることに気付きました。最初にページが読み込まれたとき (その後、クラスのメソッドがまったく呼び出されなかったとき) と、ページを更新したときです。この最後のケースでは、ページとクラスの両方の動作が期待どおりです。