p:fileDownload in p:dataTable在p:dataTable上执行搜索后无效(只刷新页面)

时间:2012-09-27 10:27:31

标签: jsf-2 datatable primefaces download

我有一个JSF / PrimeFaces Web应用程序。在一个页面中使用了<p:dataTable><p:fileDownload>个组件。 bean构造函数从DB加载数据。页面加载时它工作正常。下载按钮在数据表的最后一列中提供。单击此按钮,它将文件下载控制器,一切正常。

但是,如果我向基于查询过滤数据表结果的页面添加搜索功能,则单击下载按钮不会返回下载的文件,而只是刷新页面。

这是如何引起的?如何解决?

1 个答案:

答案 0 :(得分:2)

如果value <p:dataTable>后面的模型在显示表格的搜索结果请求与下载文件请求之间不一致,则会发生这种情况。如果你的bean是请求作用域,那反过来会发生。然后在每个HTTP请求上新创建模型。在表单提交请求期间,JSF需要在数据表中查找和执行操作时迭代模型。但是,如果模型不代表与显示表单时相同的模型,那么这将全部失败。

将bean放在视图范围中应解决问题,前提是您正在(post)构造函数中正确初始化模型并在(action)侦听器方法中更改它,因此在任何getter方法中。只要您回发到同一视图,视图范围的bean实例就会存在,因此模型不会再在每个请求上重新初始化,但只有相同的视图将在同一视图上的请求之间重复使用。

或者,如果由于技术原因确实需要将bean保留在请求范围内,那么您需要确保将搜索查询作为请求参数传递,以便可以根据搜索正确初始化模型查询。