2013-06-19 43 views
2

我有一个名为模型类和视图范围内托管bean PersonController包含设置托管bean属性从复合材料部件

我创建了取人的这个列表中的复合材料部件的人名单。什么?我想要做的是设置在其他托管bean的人员名单称为TestCompositeComponent直接从复合材料部件。任何解决方案。这是我的代码:

@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

你想改变列出从PersonController传递给TestCompositeComponentController返回给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