在我的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>
答案 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/
计数器似乎最可靠