为什么当我明确地发出500错误响应时,p:commandButton onerror不会触发?

时间:2015-06-26 21:04:16

标签: jsf jsf-2 primefaces onerror

我尝试在用户尝试删除某些内容时进行简单的对话框提醒。但我的问题在于PrimeFaces。响应内容与我想要显示的消息一样是500错误,但它没有显示消息,对话框显示为空。

这是我的支持bean的代码:

FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error!", "No se ha podido eliminar el periodo"));
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
HttpServletResponse response = (HttpServletResponse) context.getResponse();
response.setStatus(500);

这是命令按钮:

<p:commandButton value="Eliminar"
                 action="#{cicloEscolarWiz.doConfirmarEliminarPeriodoLectivo}"
                 ajax="true"
                 onerror="messages.show();"
                 update=":dlgMessages"/>

这是我的对话:

<p:dialog id="dlgMessages"
          showEffect="explode"
          closable="true"
          header="Mensajes"
          widgetVar="messages"
          modal="true"
          style="font-size: 12px;">

    <h:panelGroup id="pnlGrpMessages">

        <p:panel>
            <h:panelGrid columns="1" cellpadding="0" cellspacing="0">

                <p:messages id="deletePeriodoLectivoMessages"
                            showDetail="true"
                            autoUpdate="true"
                            closable="true" />
            </h:panelGrid>
        </p:panel>

        <p:spacer height="10"/>
        <p:separator />
    </h:panelGroup>
</p:dialog>

所以我想要实现的是当我点击命令按钮发出500错误的响应时,对话框必须出现并显示为空,没有消息。

1 个答案:

答案 0 :(得分:0)

只需将它放在页面顶部,使用样式进行定位。

<p:panel styleClass="message" >      
  <p:messages styleClass="message" showDetail="true" autoUpdate="true" closable="true" />  
  </p:panel> 

在doConfirmarEliminarPeriodoLectivo方法中,在发生错误时设置消息
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error!", "No se ha podido eliminar el periodo"));

和您的commandButton

<p:commandButton value="Eliminar"
                 action="#{cicloEscolarWiz.doConfirmarEliminarPeriodoLectivo}" />