2

我有一个应用程序,它有一个 bean,其中包含一个联系人列表,这些联系人是从整个应用程序中的各种域对象引用的:

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

可以contactsList从各种 JSF 页面创建和添加联系人,并且此列表中的条目需要在整个应用程序的各种域对象中作为 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 集合条目作为 ManagedProperty?还是有更好的方法来处理这种情况?

谢谢!

4

1 回答 1

2

从理论上讲,我看到了您记住和传递列表索引的方式,但这最终会变得非常笨拙。

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

例如

<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) {
    // ...
}
于 2011-09-19T16:49:10.623 回答