从JSF中的Datatable获取选定的行数据

所以,我试图在这个问题中实现Anthony / BalusC的方法: 如何在JSF数据表中获取选定的行索引? 但无济于事。 我还浏览了@BalusC的“使用数据表”一文 (这是一如既往的精彩),但这是为JSF1.2编写的,而2.0文章并没有真正解决获取所选行数据的问题。 当用户单击“添加到我的collections夹”按钮时,所选行不会传递给辅助bean,导航案例不会被跟踪,并且当前页面会刷新。

我在这里做错了什么想法?

这是我的支持bean:

@ManagedBean(name = "selectedBean") @RequestScoped public class SelectedBeerBean { private List favoriteBeers; private Beer selectedBeer; private HtmlDataTable datatableBeers; public HtmlDataTable getDatatableBeers() { return datatableBeers; } public void setDatatableBeers(HtmlDataTable datatableBeers) { this.datatableBeers = datatableBeers; } public String addBeer() { selectedBeer = (Beer) datatableBeers.getRowData(); return "selectedBeer"; } public List getFavoriteBeers() { return favoriteBeers; } public void setFavoriteBeers(List favoriteBeers) { this.favoriteBeers = favoriteBeers; } public Beer getSelectedBeer() { return selectedBeer; } public void setSelectedBeer(Beer selectedBeer) { this.selectedBeer = selectedBeer; } } 

这是我的xhtml页面:

   Welcome to Draft Savvy, #{draftSavvyController.name}    

You searched for "#{draftSavvyController.searchTerm}"

Here are your beers

2.0文章并没有真正解决获取所选行数据的问题

确实如此。 也许你看起来不够仔细,但它显示了两种获取所选行数据的方法。 查看辅助bean的edit()delete()方法。 第一种方式由DataModel#getRowData() , 第二种方式是通过使用新的EL 2.2function将其直接传递给action方法。


当用户单击“添加到我的collections夹”按钮时,所选行不会传递给辅助bean,导航案例不会被跟踪,并且当前页面会刷新。

value与初始请求(其中已显示带有表的页面)期间的值不完全相同时,将发生这种情况。 如果bean是请求范围和/或取决于请求参数,那么这将发生。 将bean放在视图范围中和/或确保在bean的(post)构造函数中准备完全相同的value应该修复它。 使用视图范围时,应删除 与bean的binding


在您的特定情况下,导航到涉及的不同视图,可能还有另一种更好的方式。 具体的function要求并不十分清楚。 这是一个确认页吗? 而是使用GET。 或者它只是成功行动后的目标网页? 而是使用POST-Redirect-GET。 有关其他提示,另请参阅JSF 2.0中的通信 – 处理GET请求参数 。