2011-05-02 95 views
1

我是JSF新手,并在使用数据表显示数据时遇到问题。这是我的情景:JSF Datatable无法获取OnetoMany关系对象的值?

我想显示分配给客户

JSF页面的DataTable中的合同(S):customerdetail.jsp

<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> 

实体Bean:Customer.java

@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; 
     } 
    } 
} 

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; 
    } 
} 

没有错误,整个业务逻辑层,数据层都经过了测试,工作正常,但结果为空(而且不应该!),并且没有任何异常迹象。任何人都可以帮我弄清楚这有什么问题吗? T___T

回答

0

您的facelet代码看起来没问题。

在你的实体类中有一件事情看起来很可疑。这是这一行:

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

在实体CLASSE为我自己的项目(由NetBeans的生成的类)之间的关系列表永远不会初始化。我不是JPA的专家,但是你可以在没有初始化部分的情况下尝试。