2011-05-02 5 views
1

저는 JSF Newbie이고 datatable을 사용하여 데이터를 표시하는 데 문제가 있습니다.JSF Datatable이 OnetoMany 관계 개체의 값을 가져올 수 없습니까?

<h:dataTable id="dt_contract_list" value="#{customerBean.customer.contracts}" var="item"> 
    <h:column> 
     <f:facet name="header"> 
      <h:outputText value="Contract Identifier"/> 
     </f:facet> 
     <h:outputText style="" value="#{item.contractIdentifier}"></h:outputText> 
    </h:column> 
</h:dataTable> 

엔티티 빈 customerdetail.jsp :

@Entity 
@NamedQueries({ 
    @NamedQuery(name="getCustomerByName", query="SELECT customer FROM Customer customer WHERE customer.name = :name"), 
    @NamedQuery(name="getAllCustomer", query="SELECT customer FROM Customer customer") 
}) 
public class Customer { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private int id; 
    private String name; 

    @OneToMany(targetEntity = Contract.class, 
       mappedBy = "customer", 
       cascade = CascadeType.ALL, 
       fetch=FetchType.EAGER) 
    private List<Contract> contracts = new ArrayList<Contract>(); 

    public Customer() { 
     super(); 
    } 

    public int getId() { 
     return this.id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public List<Contract> getContracts() { 
     return this.contracts; 
    } 

    @Override 
    public boolean equals(Object object) { 
     if (this.getClass().isInstance(object)) { 
      return this.getName().equals(((Customer) object).getName()); 
     } else { 
      return false; 
     } 
    } 
} 
Customer.java을 나는 고객

JSF 페이지의 데이터 테이블에 할당 된 계약 (들)을 표시 할

:이 내 시나리오입니다

BackingBean : CustomerBean.java

public class CustomerBean implements Serializable { 

    @EJB 
    private CustomerControllerLocal customerController; 

    private Customer customer; 

    public CustomerBean() { 
     customer = new Customer(); 
    } 

    public String createCustomer() { 
     // create customer 
    } 

    public String updateCustomer() { 
     // update customer 
    } 

    public String deleteCustomer() { 
     // delete custoer 
    } 

    public String getCustomerByName() { 
     try { 
      customerController.getCustomerByName(customer.getName()); 
     } catch (NotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return "customer_got"; 
    } 

    public String assignContractsToCustomer() { 
     // assign contract to customer 
    } 

    public Customer getCustomer() { 
     return customer; 
    } 

    public void setCustomer(Customer customer) { 
     this.customer = customer; 
    } 
} 

오류가없고 전체 비즈니스 로직 레이어, 데이터 레이어가 테스트되고 잘 작동하지만 결과가 null입니다 (그렇다고해서는 안됩니다!) 예외가 없습니다. 아무도 내가이 문제가 무엇인지 알아낼 수 있습니까? T___T

답변

0

facelet 코드는 괜찮아 보입니다.

엔티티 클래스에는 의심스러운 것으로 보이는 것이 하나 있습니다.

private List<Contract> contracts = new ArrayList<Contract>(); 

내 프로젝트 (넷빈으로 생성 된 클래스)의 엔티티 클래스에서는 관계 목록이 초기화되지 않습니다. 나는 JPA 전문가가 아니지만 초기화 부분없이 시도 할 수 있습니다.

관련 문제