2014-10-16 48 views
0

我在Entreprise應用程序中使用JSF 2.2和PrettyFaces 3.3.3。ManagedBean在命名時丟失數據

我映射我的豆與註釋(AdminCompaniesController.java):

@ManagedBean 
@ViewScoped 
@URLMappings(mappings={ 
    @URLMapping(id = "admin-companies", pattern = "/admin/companies", viewId = "/admin/companies.jsf") 
}) 
public class AdminCompaniesController implements Serializable { 
    @EJB 
    private CompanyService companyService; 
    private Collection<Company> companies = new ArrayList<>(); 

    Company company; 

    @PostConstruct 
    public void init() { 
      companies = companyService.getAllCompanys(); 
    } 
} 

在我看來,我顯示一個表中的數據(companies.xhtml):

<ui:repeat value="#{adminCompaniesController.companies}" var="company"> 
    <tr> 
     <td><h:outputText value="#{company.name}" /></td> 
    </tr> 
</ui:repeat> 

這工作正常,我得到了29家公司。但是,只要我給我的豆子命名:@ManagedBean(name = "companiesBean"),我就會丟失所有數據。該視圖顯示0結果。

它與bean範圍有關嗎?或者也許EJB注入也需要一個名字?

+0

如果向bean添加名稱,請確保在Facelets中更新此名稱。 – 2014-10-16 15:28:42

+0

@LuiggiMendoza是的,它在更新視圖中的名稱後工作。謝謝。 – Thrax 2014-10-17 07:24:40

回答

2

您需要更新.xhtml中的EL表達式以匹配bean的名稱。如果bean被命名爲 「companiesBean」,那麼你的.xhtml不應該:

<ui:repeat value="#{adminCompaniesController.companies}" var="company"> 
    <tr> 
     <td><h:outputText value="#{company.name}" /></td> 
    </tr> 
</ui:repeat> 

它應該是下面,而不是:

<ui:repeat value="#{companiesBean.companies}" var="company"> 
    <tr> 
     <td><h:outputText value="#{company.name}" /></td> 
    </tr> 
</ui:repeat> 

注意在<ui:repeat value='...'> attriute更新值。

+0

它的工作。非常感謝!看起來像名稱註釋會覆蓋視圖中數據綁定的類名稱。 – Thrax 2014-10-17 07:23:46

+1

@Named註釋默認爲類名,直到您通過手動指定名稱覆蓋它爲止;) – Lincoln 2014-10-18 03:05:38