2014-10-16 70 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