空时隐藏 xp:mesages 框

Hiding xp:mesages box when empty

在我的 Xpages 应用程序中,我使用 Bootstrap 作为主题。我有一个 xp:messages 盒子,我已经应用了一些 Bootstrap CSS 到。

什么时候没有消息我想隐藏包含消息的面板。所以我想到了以下内容:

<xp:panel rendered="#{javascript:facesContext.getMessages().hasNext()}"                 styleClass="alert alert-info">
<xp:text escape="true" value="#{javascript:facesContext.getMessages().hasNext()}">
</xp:text>
<xp:messages globalOnly="true" layout="list"></xp:messages>
</xp:panel>

但是我注意到有时 xp:messages 控件是空的但是 facesContext.getMessages().hasNext() returns true.

还有其他方法可以检查xp:messages的值吗?我尝试了 getComponent(...).getValue() 但应用程序中断了。

这是返回给浏览器的内容:

<div class="alert alert-info">
<span>true</span><span role="alert"></span></div>

您想将该调用包装到您保存在 SSJS 库中的函数中,并使用类似 rendered=JavaScript:hasMessages() 的东西,这样以后代码更容易理解。

在函数内部,您应该能够遍历消息并检查它们是否为空(或者最终:您不关心的消息)。

JSF 规范 getMessageList() returns 一个你可以用 isEmpty() 检查的集合。不确定它是否已在 XPages 中实现。 Paul 和往常一样,在这里有更多信息:

http://www.intec.co.uk/how-many-xpages-errors-have-i-got/

计数器似乎最可靠

我是根据你的示例代码写的,就是你只想处理全局消息。将 null 值传递给 getMessages method 很重要。这样,您将仅过滤全局消息,换句话说,过滤与特定组件无关的消息。

所有消息:facesContext.getMessages()

仅限全局消息:facesContext.getMessages(null)

特定组件的消息:facesContext.getMessages('whateverIdYouHave')

您是否尝试过直接将 bootstrap class 应用于 xp:messages 控件?例如

<xp:messages id="messages1" infoClass="alert alert-info"></xp:messages>

因此您不需要周围的面板并计算渲染的 属性