Fra*_*sco 35 jsf el instanceof
有没有办法instanceof在EL 进行检查?
例如
<h:link rendered="#{model instanceof ClassA}">
#{errorMessage1}
</h:link>
<h:link rendered="#{model instanceof ClassB}">
#{errorMessage2}
</h:link>
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 52
你可以比较Class#getName()或者,也许更好,Class#getSimpleName()到String.
<h:link rendered="#{model['class'].simpleName eq 'ClassA'}">
#{errorMessage1}
</h:link>
<h:link rendered="#{model['class'].simpleName eq 'ClassB'}">
#{errorMessage2}
</h:link>
Run Code Online (Sandbox Code Playgroud)
请注意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>
Run Code Online (Sandbox Code Playgroud)
任何无效值都会在EL 2.2+运行期间抛出EL异常.
如果你使用的是OmniFaces,那么你可以使用3.0版本#{of:isInstance()}.
<h:link rendered="#{of:isInstance('com.example.ClassA', model)}">
#{errorMessage1}
</h:link>
<h:link rendered="#{of:isInstance('com.example.ClassB', model)}">
#{errorMessage2}
</h:link>
Run Code Online (Sandbox Code Playgroud)
这不起作用EL.使用支持bean:
public class MyBean {
public boolean getIsClassA() {
if(model instanceof ClassA) {
return true;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
然后通过调用支持bean进行检查:
<h:link outcome="#{PageNameA}?faces-redirect=true&" rendered="#{myBean.isClassA}">
#{errorMessage}
</h:link>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24018 次 |
| 最近记录: |