JSF 命令按钮
Posted
技术标签:
【中文标题】JSF 命令按钮【英文标题】:JSF command button 【发布时间】:2011-07-09 06:46:36 【问题描述】:我有一个页面,当用户登录时,他将显示他最近创建的 15 条记录的列表。jsf 页面有两种形式,一种形式是搜索条件和命令按钮的字段很少。另一种形式是有一个数据表,它将获取记录并显示它。在数据表的最后一列中,根据状态显示了一些链接。
为了在 h:datatable 标记中显示记录,我使用了一个支持 bean RecordSearchBean 属性记录,如果该 bean 的搜索属性为空,它将获取记录。 RecordSearchBean 具有属性:
fromDate(用于搜索条件) toDate(用于搜索条件) 记录(用于显示记录) fetchRecords()(获取用户最近15条记录的方法) searchRecords(ActionEvent e)(由jsf页面上的搜索按钮调用)
公开列表 getRecentRecord()
if(fromDate==null && toDate == null) this.records=fetchRecords(); 返回 this.records;
公开列表 fetchRecords() //获取记录列表的代码
公共无效搜索记录(ActionEvent e) //根据搜索条件获取记录的代码 列出 searchedRecords=getREcords(this); this.records=搜索记录;
这个 RecordSearchBean 在请求范围内。
我在 jsf 中所做的是当用户登录时,他将获取由 records 属性填充的记录并显示在数据表中。
当用户点击 jsf 页面上的搜索按钮时,records 属性将由 searchRecords actionlistener 填充。 到那时一切正常,但是当我点击记录最后一列中数据表提供的任何链接时,我再次获得用户登录时显示的记录列表。
菜单中有一个主页选项卡,当用户单击该选项卡时,他将获得15条记录的列表,该列表在用户登录时显示给用户。
我认为这个问题与 jsf 托管 bean 范围有关。如果我将更改 bean 的范围,那么 databale 最后一列中的每个链接都可以正常工作。
在这种情况下,如果用户点击主页,那么他将不会得到他登录时获得的记录列表。
请帮帮我。
【问题讨论】:
【参考方案1】:我认为问题可能(正如您已经说过的)与RequestScoped
有关。如果您单击一个链接,该 Bean 将被新实例化并且所有属性都将被重置。
尝试改用ViewScoped
并在单击主页选项卡时将fromDate
和toDate
重置为null。在 ViewScope 中,如果您通过从方法返回 null 重新加载同一页面,则不会重新实例化 Bean。
【讨论】:
以上是关于JSF 命令按钮的主要内容,如果未能解决你的问题,请参考以下文章