【发布时间】:2012-07-31 09:06:29
【问题描述】:
我试图仅在 JSF 队列中有全局消息时才显示块。
我尝试使用rendered="#{not empty facesContext.getMessageList(null)}",但它总是被评估为假。
我发现的唯一方法是创建一个自定义 EL 函数并在 java 中对其进行测试。
例如。 : 我的 el 函数:
public static boolean isFacesGlobalMessages() {
return ! FacesContext.getCurrentInstance().getMessageList(null).isEmpty();
}
JSF 页面:
<h:panelGroup class="block1" layout="block" rendered="#{el:isFacesGlobalMessages()}">
<div class="block-warn-body">
<rich:messages id="msg" globalOnly="true"/>
</div>
</h:panelGroup>
我正在使用 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)}-> 错误:找不到方法消息列表 -
#{not empty facesContext.messageList}-> 如果是验证错误,则返回 true(我只希望全局错误为 true) -
#{! facesContext.getMessageList(null).isEmpty()}-> 抛出 IllegalAccessException:类 javax.el.BeanELResolver 无法访问带有修饰符“public”的类 java.util.Collections$UnmodifiableCollection 的成员
【问题讨论】:
-
您是否尝试以与您的函数相同的方式编写它。 EL 知道!运算符。
-
谢谢!刚试过(见上面的编辑),但没有奏效
-
@gonzalad ,不知道它是否对你有好处,但我更新了我的答案......
标签: jsf