Вот мой код
Пожо
public class Deal implements Serializable {
private int id;
private String name;
private String description;
private Customer customer;
//getter setter omitted
}
public class Customer implements Serializable {
private int id;
private String name;
private String email;
private String phone;
//getter setter and equal hashcode omitted
}
Управляемый компонент
@ManagedBean(name="dealBean")
@ViewScoped
public class DealBean implements Serializable {
private List<Customer> customerList;
private List<Deal> dealList;
private Deal deal;
@PostConstruct
public void init() {
deal = new Deal();
dealList = new ArrayList<Deal>();
customerList = new ArrayList<Customer>();
customerList.add(new Customer(1, "MPRL", "[email protected]", "1234455"));
customerList.add(new Customer(2, "Total", "[email protected]", "3434323"));
customerList.add(new Customer(3, "Petronas", "[email protected]", "8989876"));
}
//getter setter omitted
}
Конвертер клиентов
@FacesConverter("customerConverter")
public class CustomerConverter implements Converter {
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String customerID) {
DealBean dealBean = (DealBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("dealBean");
if (dealBean != null) {
List<Customer> customerList = dealBean.getCustomerList();
for (Customer customer : customerList) {
if (customerID.equals(String.valueOf(customer.getId()))) {
return customer;
}
}
}
return null;
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object obj) {
if (obj != null) {
return String.valueOf(((Customer)obj).getId());
}
return null;
}
}
XHTML
Customer : <h:selectOneMenu id="customer" value="#{dealBean.deal.customer}">
<f:converter converterId="customerConverter" />
<f:selectItems value="#{dealBean.customerList}" var="cus"
itemLabel="#{cus.name}" itemValue="#{cus}" />
</h:selectOneMenu>
Когда управляемый компонент находится в области запроса или сеанса, pojo Customer правильно устанавливается в pojo Deal. Проблема заключается в том, что когда управляемый компонент находится в области просмотра, для pojo Customer установлено значение Deal pojo как NULL.
Я использую JSF 2.2.0
Большое спасибо за помощь заранее.