2014-10-16 3 views
0

Entreprise 응용 프로그램에서 PrettyFaces 3.3.3과 함께 JSF 2.2를 사용하고 있습니다. 나는 데이터 (companies.xhtml)와 테이블을 표시 내 관점에서명명 된 경우 ManagedBean의 데이터가 손실됩니다.

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

:이 잘 작동

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

나는 주석 내 콩 (AdminCompaniesController.java)를 매핑 , 나는 테이블에있는 29의 회사를 얻는다. 그러나 내가 콩 이름을 짓 자마자 : @ManagedBean(name = "companiesBean"), 나는 모든 자료를 잃어 버린다. 보기에 0 개의 결과가 표시됩니다.

빈 범위와 관련이 있습니까? 아니면 EJB 인젝션에 이름이 필요할까요?

+0

빈에 이름을 추가하는 경우 Facelets에서도이 이름을 업데이트해야합니다. –

+0

@LuiggiMendoza 예,보기에서 이름을 업데이트 한 후에 작동합니다. 감사. – Thrax

답변

2

빈의 이름과 일치하도록 .xhtml의 EL 표현식을 업데이트해야합니다. 빈은 "companiesBean"라는 이름의 경우, 다음 .xhtml은하면 안

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

그것은 대신에, 다음해야 다음 <ui:repeat value='...'> attriute에서

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

참고 업데이트 된 값입니다.

+0

그것은 효과가있다. 고마워요! 이름 주석처럼 보이는 것은 뷰에서 데이터 바인딩의 클래스 이름을 덮어 씁니다. – Thrax

+1

@Named 주석은 수동으로 이름을 지정하여 무시할 때까지 클래스 이름으로 기본 설정됩니다. – Lincoln

관련 문제