我目前正在开发一个最近从JSF 1.2移植到JSF 2的应用程序(Mojarra 2.1.21 + Seam 2.3)。
有一个页面有很多类似的结构(这不是确切的语法,我知道EL不会以这种形式编译):
<s:fragment rendered="aModel.typeAbc eq 'ABC'">
<ui:include src="...xhtml"/>
</s:fragment>
<s:fragment rendered="aModel.type123 eq '123'">
<ui:include src="...xhtml"/>
</s:fragment>
包括仅在1页中评估表达式的结果。表达式总是使用模型(让我们调用实例“aModel”)来创建一个布尔表达式。问题是“aModel”可以是Model类的实例,也可以是其任何子类。更进一步 - 任何表达式都可以使用仅对特定子类实例可用的值(getters):
这会导致重复使用同一页面显示不同类型模型的详细信息将导致所有内容被执行并将其内容插入到UI树中。
然后,在状态保存期间,我得到PropertyNotFoundException,因为当前的'aModel'(假设它是Model123类型)没有方法'getTypeAbc'。
编辑1:
在状态保存期间解析的EL值是“ui:repeat”中使用的值。
现在真正的问题:
编辑2。
BalusC已经有了答案(和2-3条评论),但我现在看不到它。有人删除了吗?!如果是这样,为什么没有迹象呢?