2014-10-16 4 views
0

Я использую JSF 2.2 с PrettyFaces 3.3.3 в своем Entreprise Application.ManagedBean потерял данные при имени

Я сопоставляются мой Bean с аннотациями (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 компаний в таблице. Но как только я назову свой Bean: @ManagedBean(name = "companiesBean"), я теряю все данные. На дисплее отображается 0 результат.

Связано ли это с областью бобов? Или, может быть, инъекция EJB тоже нуждается в имени?

+0

Если вы добавите имя в свой компонент, обязательно обновите это имя в Facelets. –

+0

@LuiggiMendoza Да, он работал после обновления имени в представлении. Благодарю. – Thrax

ответ

2

Вам необходимо обновить выражения EL в вашем .xhtml, чтобы они соответствовали имени компонента. Если компонент называется "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

+1

Аннотации @Named по умолчанию относятся к имени класса, пока вы не переопределите его вручную, указав имя;) – Lincoln

Смежные вопросы