EL表达式语言中的instanceof检查

2024-03-05

有没有办法执行instanceof入住 EL 吗?

E.g.

<h:link rendered="#{model instanceof ClassA}">      
    #{errorMessage1}
</h:link>
<h:link rendered="#{model instanceof ClassB}">      
    #{errorMessage2}
</h:link>

你可以比较一下Class#getName() http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--或者,也许更好,Class#getSimpleName() http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getSimpleName-- to a String.

<h:link rendered="#{model['class'].simpleName eq 'ClassA'}">      
    #{errorMessage1}
</h:link>
<h:link rendered="#{model['class'].simpleName eq 'ClassB'}">      
    #{errorMessage2}
</h:link>

注意指定的重要性Object#getClass()带大括号表示法['class']因为class是一个保留的 Java 文字,否则会在 EL 2.2+ 中引发 EL 异常。

类型安全的替代方案是添加一些public enum Type { A, B }随着public abstract Type getType()到模型的公共基类。

<h:link rendered="#{model.type eq 'A'}">      
    #{errorMessage1}
</h:link>
<h:link rendered="#{model.type eq 'B'}">      
    #{errorMessage2}
</h:link>

在 EL 2.2+ 中,任何无效值都会在运行时引发 EL 异常。

如果您正在使用OmniFaces http://omnifaces.org,从 3.0 版本开始你可以使用#{of:isInstance()} http://omnifaces.org/docs/vdldoc/3.0/of/isInstance.fn.html.

<h:link rendered="#{of:isInstance('com.example.ClassA', model)}">      
    #{errorMessage1}
</h:link>
<h:link rendered="#{of:isInstance('com.example.ClassB', model)}">      
    #{errorMessage2}
</h:link>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EL表达式语言中的instanceof检查 的相关文章

随机推荐