jsf - jsf中的继承

标签 jsf inheritance el

我想在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/

相关文章:

java - 从 JSF 传递枚举值作为参数

java - 表达式语言配置 <jsp-config> 中的一些错误

java - JPA 乐观锁异常

jsf - 两个 JSF 库提供相同的渲染器

ajax - JSF:何时将 ClientBehavior 添加到自己的组件

java - 无法更新绑定(bind)到 bean 的组件的值

php - php构造函数中的父/子类型提示?

javascript - 浏览器和服务器之间的代码共享(继承)

symfony - twig 继承和 symfony2 Controller 变量

jsf - 在 EL 中调用直接方法或带参数/变量/参数的方法