在另一个托管bean中访问JSF托管bean的值

Sam*_*Sam 7 jsf jsf-2

我有一个报告生成页面,其中我有几个过滤器countryId,Date以及一些其他参数供用户选择.现在基于所选参数,有一个数据库调用,它使用这些参数来获取结果列表.

现在托管bean包含所有这些搜索参数和结果列表.让我们将此bean命名为 Bean1

public class Bean1 implements Constants{
    private List<SelectItem> countryList;
    private List<String> choosenCountryList;
    private List<String> choosenProgramList;
    private String invoiceDatePriorTo= CalendarUtilities.getTodaysDate() ;
    private List<CustomResults> searchResultList
}
Run Code Online (Sandbox Code Playgroud)

我们还有一个托管bean Bean2,它包含一个属性Bean1

public class Bean2 implements Constants {
    private Bean1 bean1;

    public getSearchResults(){
        //Code for fetching the search list for bean 1
        this.setsearchResultList() //=fetched list from DB;
    }

    public modifySearchResults(){}
}
Run Code Online (Sandbox Code Playgroud)

现在当我们从JSF页面触发一个动作时,我们调用该getSearchResults()方法并将其设置为searchResultList在屏幕上显示.这样我们就可以在屏幕上显示搜索列表

现在我们得到的列表会在屏幕上进行用户修改.现在我们再次调用modifySearchResults来编辑列表时,我们无法检索bean2中的列表,因为托管bean在请求范围内.

谁能告诉我如何继续解决这个问题?

Jig*_*shi 11

只需将您的dataBean声明为ManagedProperty.

从标记我认为它是关于JSF2.0.

您需要在中声明bean1为托管属性bean2.

应该是这样的

@ManagedBean
public class Bean1{
}
Run Code Online (Sandbox Code Playgroud)

@ManagedBean
public class Bean2{

  @ManagedProperty(value="#{bean1}") 
  Bean1 bean1;
  //setter & getter of bean1

}
Run Code Online (Sandbox Code Playgroud)

也可以看看