空的时候隐藏xp:mesages框

时间:2018-06-04 20:21:56

标签: xpages

在我的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()返回true。

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

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

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

3 个答案:

答案 0 :(得分:3)

我根据您的示例代码编写,也就是说,您只想处理全局消息。将null值传递给getMessages method非常重要。这样,您将仅过滤全局消息,或者换句话说,过滤未绑定到特定组件的消息。

所有讯息:facesContext.getMessages()

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

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

JSF规范getMessageList()返回您可以使用isEmpty()检查的Collection。不确定它是否已在XPage中实现。像往常一样,保罗在这里有更多信息:

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

计数器似乎最可靠