如何从JSF 2 ManagedProperty引用Java Collection条目?

时间:2011-09-19 16:45:14

标签: jsf dependency-injection jsf-2 managed-bean

我有一个应用程序,它有一个bean,它包含从整个应用程序中的各种域对象引用的Contacts列表:

@ManagedBean
@SessionScoped
public class ContactHolder implements Serializable {
    private ArrayList<Contact> contactsList;
    //getters and setters...
}

可以从各种JSF页面创建联系人并将其添加到contactsList,此列表中的条目需要在整个应用程序的各种域对象中作为ManagedProperty引用。例如,查看我的一些域对象:

@ManagedBean
public class Claim implements Serializable {
    private Contact insured; //needs to reference entry in contactsList
}

@ManagedBean
public class Vehicle implements Serializable {
    private Contact driver; //needs to reference entry in contactsList
}

由于用户可以选择从现有联系人中选择或为每个域对象创建新联系人,因此可以从多个域对象中引用contactsList中的相同联系人条目。有没有办法在JSF 2中引用/注入特定的Java Collection条目作为ManagedProperty?或者有更好的方法来处理这种情况吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

理论上,我看到你记住并传递列表索引的方法,但这最终会非常笨拙。

更好的是,如果您的目标是支持Servlet 3.0 / EL 2.2的容器(Tomcat 7,Glassfish 3等),其中支持使用其他参数调用方法,或者可以安装JBoss EL,这会增加相同的增强功能对于EL 2.1,那么你应该能够将该对象作为动作方法参数传递。

E.g。

<h:dataTable value="#{contactHolder.contacts}" var="contact">
    <h:column>
        <h:commandButton value="Claim" action="#{claim.doAction(contact)}" />
    </h:column>
</h:dataTable>

使用Claim托管bean:

public void doAction(Contact contact) {
    // ...
}