2013-06-19 5 views
2

에서 관리 빈 속성을 설정 . ?내가 사람의 목록을 복합 구성 요소를 만든</p> <p>사람의 목록을 포함 모델 <strong>사람</strong>라는 클래스와 뷰 범위 관리 빈 <strong>PersonController</strong>이 복합 구성 요소

@ManagedBean 
@ViewScoped 
public class PersonController { 

    private List<Person> persons; 

    public List<Person> getPersons() { 
     return persons; 
    } 
    public void setPersons(List<Person> persons) { 
     this.persons = persons; 
    } 

    @PostConstruct 
    public void init() { 
     persons = new ArrayList<>(); 
     Person person1 = new Person(); 
     person1.setFirstname("blah"); 
     person1.setLastname("blah"); 

     Person person2 = new Person(); 
     person2.setFirstname("blah"); 
     person2.setLastname("blah"); 

     persons.add(person1); 
     persons.add(person2); 

    } 

} 



@ManagedBean 
@ViewScoped 
public class TestCompositeComponentController { 


    private List<Person> persons; 

    public List<Person> getPersons() { 
     return persons; 
    } 

    public void setPersons(List<Person> persons) { 
     this.persons = persons; 
    } 


} 



<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html > 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:composite="http://java.sun.com/jsf/composite"> 

<composite:interface componentType="testCompositeController"> 

    <composite:attribute name="persons" /> 


</composite:interface> 

<composite:implementation> 

    <h:outputText value="composite"></h:outputText> 
</composite:implementation> 

</html> 


<!DOCTYPE html > 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:test="http://java.sun.com/jsf/composite/test" 
    xmlns:f="http://java.sun.com/jsf/core"> 
<h:head></h:head> 
<h:body> 
    <test:test persons="#{personController.persons}" /> 
</h:body> 
</html> 

답변

0

당신이를 변경 하시겠습니까 : 내가 뭘 원하는 것은이라고 다른 관리 빈에있는 사람들의 목록을 설정하는 것입니다 직접 컴포지트 구성 요소에서 TestCompositeComponent은 ... ..이 내 코드 모든 솔루션입니다 PersonController에서 TestCompositeComponentController로 전달 된 Person을 다시 PersonController로 나열 하시겠습니까?

이 경우 PersonController의 범위를 @SessionScoped로 변경하고 TestCompositeComponentController에 삽입하십시오. 이렇게하면 PersonController에있는 사람을 수정할 수 있습니다. 실제 시나리오에서

@ManagedBean 
@ViewScoped 
public class TestCompositeComponentController { 


    private List<Person> persons; 
    @Inject PersonController personController; 

    public List<Person> getPersons() { 
     return persons; 
    } 

    public void setPersons(List<Person> persons) { 
     this.persons = persons; 
    } 

    public void updateTheOtherList() { 
     personController.setPersons(this.persons); 
    } 
} 

, 당신의 복합 구성 요소의 수정은 데이터베이스에 지속 될 것이고 다시 탐색 할 때 변화는 사람 목록에 가져올 새로운으로 볼 수있다.

+0

'@Inject'는 CDI 전용 주석이 아닙니까? 그것도'@ManagedProperty'와 함께 작동합니까? – mabi

+0

제 제안은 TestCompositeComponentController에서 사람들을 독립적으로 처리하고, 결국 CDI를 통해 PersonController를 업데이트하는 것입니다. – Yamada