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 并在单击主页选项卡时将fromDatetoDate 重置为null。在 ViewScope 中,如果您通过从方法返回 null 重新加载同一页面,则不会重新实例化 Bean。

【讨论】:

以上是关于JSF 命令按钮的主要内容,如果未能解决你的问题,请参考以下文章

JSF 命令按钮

jsf中的后退命令按钮

JSF 2.2 h:命令按钮触发后的输入文件更新页面

如何使用 AJAX 单击命令按钮在 JSF 中呈现数据表

javascript在启动时调用托管bean的方法,而不是在命令按钮单击时调用它们

JSF 2.1 中的 HTML 4 <按钮>