Как ссылаться на запись Java Collection из JSF 2 ManagedProperty? - PullRequest
2 голосов
/ 19 сентября 2011

У меня есть приложение с компонентом, содержащим список контактов, на которые ссылаются различные объекты домена в приложении:

@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?Или есть лучший подход к этому сценарию?

Спасибо!

1 Ответ

2 голосов
/ 19 сентября 2011

Теоретически, я вижу способы, с помощью которых вы запоминаете и передаете списочные индексы, но это в конечном итоге будет довольно неуклюжим.

Гораздо лучше, если вы нацеливаетесь на контейнер с сервлетом 3.0 / EL 2.2 (Tomcat 7, Glassfish 3 и т. Д.), В котором поддерживается вызов методов с дополнительными аргументами, или можете установить JBoss EL , который добавляет то же самое усовершенствование EL 2.1, тогда вы сможете просто передать этот объект в качестве аргумента метода действия.

1007 * Е.Г. *

<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) {
    // ...
}
...