检查JSF EL中显示的严重性消息

ale*_*lex 4 jsf el jsf-2

我想知道使用EL在当前页面中显示哪种消息.我对高于警告严重性的错误特别感兴趣.我目前的解决方案是:

#{ facesContext.getMaximumSeverity().getOrdinal() ge 2}
Run Code Online (Sandbox Code Playgroud)

但我想要一个更好的(更安全,更明确),像这样:

#{facesContext.getMaximumSeverity() != null and facesContext.getMaximumSeverity().compareTo(facesMessage.SEVERITY_WARN)>0}
Run Code Online (Sandbox Code Playgroud)

问题是我无法从facesMessage.SEVERITY_WARN中获得任何价值.有人可以帮我弄这个吗?谢谢.

Bal*_*usC 8

在即将推出的EL 3.0之前,您无法在EL中引用常量.

至于开源库,唯一可以帮助你的是OmniFaces.它提供了一个<o:importConstants>用于此目的的标签.

<o:importConstants type="javax.faces.application.FacesMessage" />
Run Code Online (Sandbox Code Playgroud)

这样你就可以使用了

#{facesContext.maximumSeverity eq FacesMessage.SEVERITY_ERROR or facesContext.maximumSeverity eq FacesMessage.SEVERITY_FATAL}
Run Code Online (Sandbox Code Playgroud)

要么

#{facesContext.maximumSeverity.compareTo(FacesMessage.SEVERITY_WARN) gt 0}
Run Code Online (Sandbox Code Playgroud)

要么

#{facesContext.maximumSeverity.compareTo(FacesMessage.SEVERITY_ERROR) ge 0}
Run Code Online (Sandbox Code Playgroud)

要么

#{facesContext.maximumSeverity.ordinal gt FacesMessage.SEVERITY_WARN.ordinal}
Run Code Online (Sandbox Code Playgroud)

要么

#{facesContext.maximumSeverity.ordinal ge FacesMessage.SEVERITY_ERROR.ordinal}
Run Code Online (Sandbox Code Playgroud)

(注意我省略了不必要的get前缀和()parens,EL中的IDE自动完成不一定生成正确和干净的代码)