2013-05-26 64 views
0

我有一個簡單的XHTML頁面:如何將facelets綁定到CDI bean?

<h:form> 
    <p:dataTable var="customer" value="#{customersTableBackingBean.allCustomers}"> 
     <p:column headerText="First Name"> 
      <h:outputText value="#{customer.contactFirstName}" /> 
     </p:column> 

     <p:column headerText="City"> 
      <h:outputText value="#{customer.city}" /> 
     </p:column> 

    </p:dataTable> 
</h:form> 

當我CustomersTableBackingBean.java如下:

@ManagedBean 
@RequestScoped 
public class CustomersTableBackingBean { 

    @EJB(name = "#{customersService}") 
    CustomersService customersService; 

    public List<Customers> getAllCustomers(){ 
     return customersService.getAllCustomers(); 
    } 

    public String sayHello(){ 
     return "Hello from a managed bean!"; 
    } 

} 

我看到從數據庫中讀取一些數據,上的index.xhtml預期。

然而,當我改變@ManagedBean註釋@Named和進口:javax.inject.Named沒有數據的index.xhtml。

這個結構有什麼問題?

如何使用CDI bean而不是JSF ManagedBean?

(我有一個beans.xml的文件,該文件是空的。)

+0

順便說一句,我還保留@ResuestScoped註釋和導入:import javax.enterprise.context.RequestScoped; import javax.inject.Named; –

+0

似乎你還沒有學到基本知識:停止在你的getter/setter中有業務邏輯。另請參閱[爲什麼JSF多次調用getters](http://stackoverflow.com/q/2090033/1065197) –

回答

0

我會回答我的問題:

的beans.xml進入WEB-INF文件夾不是META-INF!

+3

此外,您將使用'@ Named'而不是'@ ManagedBean',並且'@ RequestScoped'註釋必須是來自包'javax.enterprise.context'。 –