【问题标题】:Hiding xp:mesages box when empty为空时隐藏 xp:mesages 框
【发布时间】:2018-06-06 16:58:11
【问题描述】:

在我的 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>

【问题讨论】:

    标签: xpages


    【解决方案1】:

    我根据您的示例代码编写,即您只想处理全局消息。将null 值传递给getMessages method 很重要。这样,您将只过滤全局消息,换句话说,过滤不绑定到特定组件的消息。

    所有消息:facesContext.getMessages()

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 谢谢!我注意到我可以移除周围的面板控件并且可以跳过调用 hasMessages 方法。
      【解决方案3】:

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

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

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

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

      计数器似乎最可靠

      【讨论】:

      • 不是第一次了,我完全忘记了我写了那篇博文!听起来问题可能是某些消息与特定组件相关联。因此它们不会显示在globalOnly 消息面板中,而是存在于hasNext() 中。查看docs.oracle.com/javaee/6/api/javax/faces/context/… 中的规范,facesContext.getMessages()` 有一个采用 ID 的重载方法。因此,如果您为顶级 XPage 或视图面板等组件传递 ID,它应该只获取全局 ID(该组件不存在)
      猜你喜欢
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 2020-12-12
      相关资源
      最近更新 更多