问题描述
这是由 Mojarra 的状态管理中的错误引起的
否则,您最好的选择是替换
解决方法
我有一个超类Person
:
public class Person {
public abstract Type getType();
}
我有它的 2 个子类:
public class JuridicalPerson extends Person {
public Type getType() {
return Type.JP;
}
public List<JuridicalBelong> getJuridicalBelongs() {
return juridicalBelongs;
}
}
public class NaturalPerson extends Person {
public Type getType() {
return Type.NP;
}
public List<NaturalBelong> getNaturalBelongs() {
return naturalBelongs;
}
}
JuridicalBelong
并且NaturalBelong
具有不同的属性并且不能被子类化。
我有它们List<Person>
,我想在 JSF/Facelets 中展示如下:
<ui:repeat value="#{bean.persons}" var="person">
<h:panelGroup rendered="#{person.type eq 'JP'}">
<ui:repeat value="#{person.juridicalBelongs}" var="juridicalBelong">
...
</ui:repeat>
</h:panelGroup>
<h:panelGroup rendered="#{person.type eq 'NP'}">
<ui:repeat value="#{person.naturalBelongs}" var="naturalBelong">
...
</ui:repeat>
</h:panelGroup>
</ui:repeat>
但是,这会导致以下异常:
javax.el.PropertyNotFoundException:类“com.example.NaturalPerson”没有属性“juridicalBelongs”。
这怎么可能?根据我的rendered
情况
<h:panelGroup rendered="#{person.type eq 'JP'}">
它应该忽略NaturalPerson
,对吗?