Jsf 面通知不工作

Jsf 面通知不工作,jsf,jsf-2,Jsf,Jsf 2,我对Faces消息有一个奇怪的问题 有时,执行某些方法后,,会正确显示通知。但是有一些特定的JSF页面没有显示通知 例如: public String create() { try { getFacade().create(current); JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("NotaCreated")); return prep

我对Faces消息有一个奇怪的问题

有时,执行某些方法后,
会正确显示通知。但是有一些特定的JSF页面没有显示通知

例如:

public String create() {
    try {
        getFacade().create(current);
        JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("NotaCreated"));
        return prepareCreate();
    } catch (Exception e) {
        JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
        return null;
    }
}
在中调用该方法

<h:commandLink action="#{notaController.create}" value="#{bundle.CreateNotaSaveLink}"/>
这是Create.xhtml

<html 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.org/ui">

<ui:composition template="/template.xhtml">
    <ui:define name="title">
        <h:outputText value="#{bundle.CreateNotaTitle}"></h:outputText>
    </ui:define>
    <ui:define name="body">
        <h:panelGroup id="messagePanel" layout="block">
            <h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
        </h:panelGroup>
        <h:form>
            <h:panelGrid columns="2">

                <h:outputLabel value="#{bundle.CreateNotaLabel_fecha}" for="fecha" />
                <p:calendar value="#{notaController.selected.fecha}" id="fecha"/>
                <h:outputLabel value="#{bundle.CreateNotaLabel_observaciones}" for="observaciones" />
                <p:inputTextarea rows="4" cols="30" id="observaciones" value="#{notaController.selected.observaciones}" title="#{bundle.CreateNotaTitle_observaciones}" />
                <h:outputLabel value="#{bundle.CreateNotaLabel_tipoNota}" for="tipoNota" />
                <p:selectOneMenu id="tipoNota" value="#{notaController.selected.tipoNota}" required="true" requiredMessage="#{bundle.CreateNotaRequiredMessage_tipoNota}">
                    <f:selectItem itemLabel="---"/>
                    <f:selectItem itemValue="debito" itemLabel="Débito"/>
                    <f:selectItem itemValue="credito" itemLabel="Crédito"/>
                </p:selectOneMenu>
                <h:outputLabel value="#{bundle.CreateNotaLabel_monto}" for="monto" />
                <p:inputText id="monto" value="#{notaController.selected.monto}" title="#{bundle.CreateNotaTitle_monto}" required="true" requiredMessage="#{bundle.CreateNotaRequiredMessage_monto}"/>
                <h:outputLabel value="#{bundle.CreateNotaLabel_factura}" for="factura" />
                <p:selectOneMenu id="factura" converter="#{facturaController.convertidor}" value="#{notaController.selected.factura}" filter="true" filterMatchMode="startsWith" required="true" requiredMessage="#{bundle.CreateNotaRequiredMessage_factura}">
                    <f:selectItem itemLabel="---"/>
                    <f:selectItems value="#{facturaController.facturas}" var="factura" itemValue="#{factura}" itemLabel="#{factura.idFactura}" />
                </p:selectOneMenu>

            </h:panelGrid>
            <br />
            <h:commandLink action="#{notaController.create}" value="#{bundle.CreateNotaSaveLink}">
                <f:setPropertyActionListener value="#{cargaController.crearCargaDefault(sesionMB.usuario)}"
                                             target="#{notaController.selected.carga}"/>
            </h:commandLink>
            <br />
            <br />
            <h:commandLink action="#{notaController.prepareList}" value="#{bundle.CreateNotaShowAllLink}" immediate="true"/>
            <br />
            <br />
            <h:link outcome="/inicio" value="#{bundle.CreateNotaIndexLink}"/>
        </h:form>
    </ui:define>
</ui:composition>







我也有同样的问题。faces消息没有呈现,它正在丢失。我试过这个代码,它成功了

FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg);
FacesContext context = FacesContext.getCurrentInstance();
context.getExternalContext().getFlash().setKeepMessages(true);
context.addMessage("successInfo", facesMsg);

我希望它能起作用。

您的问题缺少任何可以用来帮助您解决问题的内容。风景在哪里?JSFUtil是什么?它工作正常吗?@JaqenH'ghar我添加了消息传递的方法。我不知道还有什么其他代码示例可以给出,因为所有控制器都有相同的create()方法,对其中一些控制器有效,但对这个和其他控制器无效。@kolossus我已经为create视图添加了代码。正如我前面所说,JsfUtil方法适用于某些方法,但不适用于其他方法。在调用JsfUtil.addSuccessMessage(message)的任何方法中,有时显示消息,有时不显示消息t@JaqenH'是的,没有错误或警告谢谢你的合作,我检查了我的代码,发现问题只出现在返回字符串有?faces redirect=true时。我把它去掉了,效果很好。但问题是,我需要重定向链接作为一项要求。我怎样才能在没有这个问题的情况下处理这个问题呢?我在发布这个之前就试过了。我收到了一条关于消息的警告消息,不记得了,但发现问题是当您输入返回字符串?faces重定向时=true@CarlosAndres阅读了此链接中的公认答案[link]BalusC谈到页面重定向时消息中的错误。也许是你的情况。
FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg);
FacesContext context = FacesContext.getCurrentInstance();
context.getExternalContext().getFlash().setKeepMessages(true);
context.addMessage("successInfo", facesMsg);