【问题标题】:Why does p:commandButton onerror not fire when I explicitly make a 500 error response?为什么当我明确做出 500 错误响应时 p:commandButton onerror 不会触发?
【发布时间】:2015-06-26 21:04:15
【问题描述】:

我正在尝试为用户尝试删除某些内容时发出简单的对话框警报。但我的问题是 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 错误响应时,对话框必须出现并出现但为空,没有消息。

【问题讨论】:

  • 您需要在它开始呈现视图之前执行此操作(使用&lt;f:event type="preRenderView"&gt;&lt;f:viewAction&gt; (JSF 2.2)),因为响应已经发送到无法收回的客户端。已经回答了一些问题,例如this。在这种情况下,只需显示一条用户友好的消息。

标签: jsf jsf-2 primefaces onerror


【解决方案1】:

只需将其放在页面顶部,使用样式作为位置。

<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}" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-18
    • 2021-12-17
    • 2020-10-18
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    相关资源
    最近更新 更多