1

必須属性を持つフィールドがあります。フィールドに値を入力せずに [承認] ボタンを押してデータを保存すると、エラー メッセージが表示されます。ここまでは順調ですね。しかし、その直後に [キャンセル<p:dialog/>] ボタンをクリックすることにした場合、そのエラー メッセージは、要素内に表示されるはずの確認メッセージを上書きします。

注:代わりにコンポーネントを使用する場合、タグではなく属性を<p:confirmDialog/>使用していると思われるため、問題はないようです。message=""<p:messages/>

XHTML

<p:dialog>
<p:outputPanel>
      <h:form>

      <h:outputText value="Field:"/>
      <p:inputText id="field" value="" type="text" required="true" requiredMessage="You must complete the field" />                         
      <p:growl id="messages" showDetail="true"/>

      <p:commandButton id="dialogCancel" value="Cancel" oncomplete="confirmCancelDialog.show();"  actionListener="#{controller.addCloseWarn}" />    

      </h:form>
</p:outputPanel>
</p:dialog>

<h:form>
<p:dialog id="confirmCancelDialog" header="Warning!" widgetVar="confirmCancelDialog" modal="true" >                                         
    <p:messages id="closeMessage" showDetail="true" autoUpdate="true" />                                    
    <p:commandButton id="confirm" value="Accept" onclick="..." />  
    <p:commandButton id="decline" value="Cancel" onclick="..." />               
</p:dialog> 
</h:form>

Bean コントローラー

public void addCloseWarn(ActionEvent actionEvent) { 
        FacesContext.getCurrentInstance().addMessage("closeMessage", new FacesMessage(FacesMessage.SEVERITY_WARN, null, 
                          "Are you sure you want to leave the page?")); 
}
4

1 に答える 1

2

[キャンセル] ボタンの問題は、フォームが送信され、検証が実行されることです。process="@this"に属性を追加するとcommandButton、フォームの他の部分は処理されず、addCloseWarnメソッドが実行されます。

messageまた、これはおそらくタグの標準的な使用法ではないことも付け加えておきます。確認の質問ではなく、エラー、警告、および成功メッセージを表示するために使用されます。したがってconfirmDialog、通常のテキストと [OK] - [キャンセル] ボタンだけの標準ダイアログを使用または使用します。

于 2013-02-06T19:49:36.050 に答える