JSF使用EL来测试全局消息的存在

gon*_*lad 7 jsf

我只是在JSF队列中有全局消息时才尝试显示一个块.

我尝试使用rendered="#{not empty facesContext.getMessageList(null)}",但它总是被评估为假.

我找到的唯一方法是创建一个自定义EL函数并在java中测试它.

例如.:我的功能:

public static boolean isFacesGlobalMessages() {
  return ! FacesContext.getCurrentInstance().getMessageList(null).isEmpty();
}
Run Code Online (Sandbox Code Playgroud)

JSF页面:

<h:panelGroup class="block1" layout="block" rendered="#{el:isFacesGlobalMessages()}">
  <div class="block-warn-body">
    <rich:messages id="msg" globalOnly="true"/>
  </div>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)

我正在使用Mojarra 2.1.5.

我错过了什么吗?谢谢 !

编辑:尝试了以下建议,但到目前为止没有运气:

  • #{not empty facesContext.getMessageList(null)} - >总是假的
  • #{! facesContext.getMessageList(null)} - >错误
  • #{! empty facesContext.getMessageList(null)} - >总是假的
  • #{fn:length(facesContext.getMessageList(null)) > 0} - >总是假的
  • #{not empty facesContext.messageList(null)} - >错误:找不到方法messageList
  • #{not empty facesContext.messageList} - >如果是验证错误则返回true(我只想在全局错误时为true)
  • #{! facesContext.getMessageList(null).isEmpty()} - > throws IllegalAccessException:类javax.el.BeanELResolver无法使用修饰符"public"访问类java.util.Collections $ UnmodifiableCollection的成员

Dan*_*iel 18

无需定制EL功能

试试这个

rendered="#{not empty facesContext.messageList}"
Run Code Online (Sandbox Code Playgroud)

编辑

我自己没试过,但试试吧

rendered="#{not empty facesContext.messageList(null)}"
Run Code Online (Sandbox Code Playgroud)

一个主意...

 rendered="#{not facesContext.validationFailed and not empty facesContext.messageList}"
Run Code Online (Sandbox Code Playgroud)

  • FacesContext#getMessageList()返回** all **消息,也返回非全局消息。 (2认同)