2011-09-19 1 views
2

У меня есть приложение, которое имеет компонент, который содержит список контактов, которые ссылаются из различных объектов предметной области на протяжении применения:Как ссылаться на запись Java Collection из JSF 2 ManagedProperty?

@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 может быть ссылочных от более одного объекта домена. Есть ли способ ссылаться/вводить определенную запись Java Collection в качестве ManagedProperty в JSF 2? Или есть лучший подход к решению этого сценария?

Спасибо!

ответ

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 управляемого компонента:

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

Спасибо за быстрый ответ! – holic87