在另一个受管Bean中访问JSF受管bean的值
我有一个报告生成页面,其中有几个筛选器,例如countryId
,Date
以及其他几个供用户选择的参数。现在基于所选的参数,有一个数据库调用,它使用这些参数来获取结果列表。在另一个受管Bean中访问JSF受管bean的值
现在管理的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
}
我们还有一个管理的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(){}
}
属性
现在,当从JSF页面触发一个动作时,我们调用getSearchResults()
方法,并且我们将searchResultList
设置为在屏幕上显示。这样我们就能够在屏幕上显示搜索列表
现在,我们得到的列表将在屏幕上经过用户修改。现在,当我们再次调用modifySearchResults来编辑列表时,我们无法检索bean2中的列表,因为托管bean是在请求范围内。
有谁能告诉我如何继续解决这个问题吗?
就宣布你为公司Databeans managedProperty
从标签我承担其约JSF2.0
需要声明bean1为托管财产bean2
它应该看起来像
@ManagedBean
public class Bean1{
}
and
@ManagedBean
public class Bean2{
@ManagedProperty(value="#{bean1}")
Bean1 bean1;
//setter & getter of bean1
}
请参见
好你自己说的。你必须从RequestScope
移动bean。
根据您的应用程序,你可能要使用:
@SessionScoped
@ViewScoped
Here你可以找到关于选择合适范围的条款。
其次,您可能要使用依赖注入。 JSF有很好的@ManagedProperty
。你可以阅读更多关于它here。
编辑
现在看到你不想使用Session这使我想起另一种解决方案是:
@ManagedBean
@ViewScoped
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
public getSearchResults(){
// Your code here
}
public modifySearchResults(){
// Your code here
}
}
至于你说的问题是,你可以将所有信息从一个请求保存到下一个请求。通常在使用@ApplicationScoped
或@ViewScoped
时会出现这种情况。由于不同的原因,在某些情况下这可能不是最好的解决方案。
对于您的示例,将所有方法放入一个为@ViewScoped
的bean中可能是最佳解决方案。这种方法有其缺点,但我认为这是一样好..
Here你可以阅读更多关于此事。
u能细说位? – Sam 2012-03-07 13:12:38
你读过这篇文章了吗? – 2012-03-07 13:17:53
是在我的bean2 bean1是一个托管属性已经... – Sam 2012-03-07 13:20:43