我有一个页面,当用户登录时,他将显示他创建的15个最近记录的列表.jsf页面有两个表单,一个表单有少量字段用于搜索条件和命令按钮。另一个表单是有一个数据表,它将获取记录并显示它。在数据表中,最后一列显示了一些基于状态的链接。
要显示h:datatable标记中的记录,我正在使用支持bean RecordSearchBean属性记录,如果bean的搜索条件为null,则将获取记录。 RecordSearchBean具有优势:
fromDate(用于搜索criertia) toDate(用于搜索criertia) 记录(用于显示记录) fetchRecords()(获取用户最近15条记录的方法) searchRecords(ActionEvent e)(由jsf页面上的搜索按钮调用)
公开列表getRecentRecord(){
if(fromDate == null&& toDate == null){ this.records = fetchRecords(); } 归还。记录; }
public list fetchRecords(){ //获取记录列表的代码 }
public void searchRecords(ActionEvent e){ //根据搜索条件获取记录的代码 列出的搜索记录= getREcords(this); this.records = searchedRecords; }
此RecordSearchBean位于请求范围内。
我在jsf中所做的是当用户登录时,他将获取由records属性填充的记录并显示在datatable中。
当用户点击jsf页面上的搜索按钮时,将由searchRecords actionlistener填充records属性。 直到那时一切正常工作但是当我点击记录最后一列中数据表提供的任何链接时,我再次获得用户登录时显示的记录列表。
菜单中有一个主页选项卡,当用户点击此选项卡时,他将获得用户登录时显示的15条记录的列表。
我认为这个问题与jsf托管bean范围有关。如果我要更改bean的范围,那么数据库的最后一列中的每个链接都能正常工作。
在这种情况下,如果用户点击主页,那么他将无法获得他登录时获得的记录列表。
请帮帮我。
答案 0 :(得分:0)
我认为问题可能(正如您已经说过的)与RequestScoped
有关。如果单击某个链接,将重新实例化Bean,并重置所有属性。
尝试使用ViewScoped
代替,如果单击HomePage选项卡,则将fromDate
和toDate
重置为null。在ViewScope中,如果通过从方法返回null重新加载同一页面,则不会重新实例化Bean。