У меня есть суперкласс 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" не имеет свойства "юридические символы".
Как это возможно? Согласно моему условию rendered
<h:panelGroup rendered="#{person.type eq 'JP'}">
он должен игнорировать NaturalPerson
, правильно?