1

dataTable を使用して、いくつかのレコードを表示します。ユーザーは、actionsDialog という名前のダイアログを使用してレコードを追加/変更できます。レコードを保存する前に、reasonDialog と呼ばれるモーダル ダイアログが表示され、ユーザーは現在の操作の理由を入力する必要があります。私のロジックでは、データがデータベースに保存された後、理由を null に設定しました。

操作を繰り返すと問題が発生します。理由には以前の値が含まれています。コードをデバッグしたところ、inputTextarea のローカル値が理由として割り当てられているためにこの問題が発生していることに気付きました。ローカル値を削除するにはどうすればよいですか? PrimeFaces 3.0、Mojara 2.0.4、Tomcat 7 を使用しています。

私の理由ダイアログのフェイスレットは次のとおりです。

<ui:composition 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.prime.com.tr/ui">  
    <p:dialog header="#{label.reason}" widgetVar="reasonDialog"
        showEffect="fade" hideEffect="explode" modal="true" dynamic="true">        
        <h:panelGrid columns="2">
            <p:inputTextarea rows="5" cols="40" autoResize="false"
                value="#{recordsBean.reason}" maxLength="1024" />
            <f:facet name="footer">
                <p:outputPanel layout="block">
                <p:commandButton value="ok" update="genericRecords msgs"
                    action="#{recordsBean.execute}"
                    oncomplete="reasonDialog.hide();actionsDialog.hide()" />
                </p:outputPanel>
            </f:facet>
        </h:panelGrid>
    </p:dialog>
</ui:composition>

アクション ダイアログは次のようになります。

<p:dialog id="actionsDialog" widgetVar="actionsDialog" dynamic="true"
    resizable="false" height="600" showEffect="fade" hideEffect="fade" modal="true">
<ui:include src="/WEB-INF/flows/genericRecord.xhtml"/>
<f:facet name="footer">  
        <p:outputPanel layout="block">
    <p:commandButton value="save" onclick="reasonDialog.show()" />
    <p:commandButton value="cancel" immediate="true" 
                oncomplete="actionsDialog.hide()" />
    </p:outputPanel>
</f:facet>
</p:dialog>
4

3 に答える 3

9

ダイアログを表示する前に、ダイアログの内容を更新/更新する必要があります。update属性でその(相対的な)クライアントIDを参照し、 show()fromonclickをtoに移動しoncompleteて、更新後に実行されるようにします。

<p:commandButton value="save" update="reasonDialog" oncomplete="reasonDialog.show()" />

それ以外の場合は、もちろん、閉じられる前の古いコンテンツが表示されます。つまり、ajax / JSがまったく同じページを操作していて、新しいページなどを操作しているわけではありません。

于 2012-08-13T10:16:51.693 に答える
1

p:commandButtonにajax="false"属性を追加してみてください。サンプルを見る

   <p:commandButton value="ok" update="genericRecords msgs"
                action="#{recordsBean.execute}" ajax="false"
                oncomplete="reasonDialog.hide();actionsDialog.hide()" />
于 2012-08-13T08:54:48.123 に答える