我想在jsf打印的bean中使用继承。 例如,我有一个父类(动物),有两个 child (猫和狗),具有不同的属性(catAttr和dogAttr)和鉴别器(类型)。我想打印一份包含所有属性的动物列表。 代码示例(它返回一个属性未找到异常),jsf 页面:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<ui:repeat value="#{animalsBean.animals}" var="a">
<!-- General attributes -->
<label>Name: </label> #{a.name}<br/>
<!-- Specific attributes -->
<h:panelGroup rendered="#{a.type eq 'cat'}">
<label>Cat attributes:</label>
<h:inputTextarea value="#{a.catAttr}"/><br/>
</h:panelGroup>
<h:panelGroup rendered="#{a.type eq 'dog'}">
<label>Dog attributes:</label>
<h:inputTextarea value="#{a.dogAttr}"/><br/>
</h:panelGroup>
</ui:repeat>
</h:body>
动物 bean :
@ManagedBean
@SessionScoped
public class AnimalsBean {
private List<Animal> animals;
public List<Animal> getAnimals() {
return animals;
}
public void setAnimals(List<Animal> animals) {
this.animals = animals;
}
}
有人可以帮助我吗? 谢谢!
最佳答案
JSF 标记组件无法识别模型类的内部类型(猫、狗等)。如果您使用父类,则只能使用其公共(public)属性(对于所有子类都是通用的)。
public class Animal {
protected String name;
//getter and setter...
}
public class Cat extends Animal {
private String specie;
//getter and setter...
}
public class Dog extends Animal {
public String race;
//getter and setter...
}
@SessionScoped
@ManagedBean(name="animalBean")
public class AnimalsBean {
private Cat cat;
private Dog dog;
private Animal animal;
public AnimalsBean() {
cat = new Cat();
dog = new Dog();
animal = new Cat();
}
//getters and setters...
}
xhtml 代码:
<h:form>
<h:inputText value="#{animalBean.cat.specie}" />
<h:inputText value="#{animalBean.dog.race}" />
<h:inputText value="#{animalBean.animal.name}" />
<!-- this line won't work -->
<h:inputText value="#{animalBean.animal.specie}" />
</h:form>
关于jsf - jsf中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10166606/