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>

豆控制器

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 - Cancel 按钮的标准对话框。

于 2013-02-06T19:49:36.050 回答