如何使用b:growl

时间:2018-08-17 12:47:30

标签: jsf bootsfaces

我试图显示从bean加载的特定b:growl元素,基本上,我试图从BootsFaces展示(https://showcase.bootsfaces.net/forms/Growl.jsf;jsessionid=QdtXGdUxPK9sS714iLGuyksK93AMfZM-WfZm3py_.showcase01)中复制示例。 我使用了FacesMessages.info,但收到了两个b:growl消息。那么,如何定位特定的b:growl元素以显示我的消息? 在展示的示例中:messagesBean.specificInfo方法有什么作用?

修改: 谢谢斯蒂芬,但对我不起作用,我仍然收到两则b:grolw消息,忽略了一个宽度globalOnly =“ true”,而是显示了标准宽度。

这是我的代码: xhtml:

<ui:define name="content">

    <div class="container" style="width: auto">
        <h:form id="idForm">
            <b:panel title="#{msg['administrarServicio']}" look="primary"
                id="panel" collapsible="false">

                <b:commandButton id="idBorrar" col-lg="3" col-md="3" colSm="10"
                    col-xs="10" offset-lg="2" offset-md="2" offset-sm="1"
                    offset-xs="1" value="Borrare o o o o" look="danger"
                    iconAwesome="trash" iconAlign="right"
                    action="#{serviceManagementBean.borrar}" />
            </b:panel>

            <b:growl id="growlCommonMsg" placementFrom="bottom"
                show-detail="true" show-summary="true" allowDismiss="true"
                global-only="true" delay="10000" escape="true" />

            <b:growl for="idBorrar" id="growlMsg" globalOnly="true"
                placementFrom="bottom" show-detail="true" show-summary="true"
                allowDismiss="true" delay="10000" escape="true" global-only="false"
                animation-enter="animated bounceInDown"
                animation-exit="animated flipOutX" />
        </h:form>

    </div>
</ui:define>

Java:

public void borrar() {
        System.out.println("BORRAR " + this.idTramite);
        FacesMessages.info("idForm:idBorrar", "Se boró correctamente el servicio " + this.idTramite, "Nunca va a volver. ¡Nunca!");
}

1 个答案:

答案 0 :(得分:2)

让我们从您缺少的源代码开始。 Here you go:

public void specificInfo() {
    FacesMessages.info("growlForm:ref", "Info", "This is a specific message!");
}
public void error() {
    FacesMessages.error("Error!", "Something has gone <strong>wrong</strong>.");
}

您会注意到唯一的区别是参数的数量。 specificInfo()包含ID growlForm:ref。您没有在代码段中包含它,但是growlForm是周围表单的ID(至少在我们的展示柜中)。 id的第二部分ref表示FacesMessage将由<h:message><b:message><p:message><p:growl>或{{1 }}在此表单中定义,并带有属性<b:growl>

查看展示柜中的两个for="ref",您会看到第一个咆哮没有<b:growl>属性。而是设置for。这将导致咆哮声忽略每个带有id的FacesMessage。它将忽略globalOnly="true"生成的消息。

这就是为什么在我们的展示示例中有两个specificInfo(),但是每个用户操作只会触发其中一个。

就是这样。问题恰恰相反:一个<b:growl>s在屏幕上显示两个咆哮元素。您尚未提供任何Java源代码(还?),所以我只能猜测。最可能的解释是,您实际上两次生成了<b:growl>。我建议在调试器中设置一个断点(或者,如果愿意的话,添加一个System.out.println())以排除该中断。

希望我给您足够的线索来解决您的问题。如果不是这样,请随时通过我们的bug tracker on GitHub与我们联系。请包括此StackOverflow问题的链接,以便必要时我可以更新此答案。