2012-09-27 41 views
2

我有一个JSF/PrimeFaces Web应用程序。在一页<p:dataTable><p:fileDownload>组件已被使用。 bean构造函数从DB加载数据。它在页面加载时工作正常。下载按钮位于数据表的最后一列。当点击这个按钮时,它将文件下载控制器,一切工作正常。号码:fileDownload在号码:dataTable中不会在p进行搜索后工作(只是刷新页面):dataTable的

但是,如果我添加一个搜索功能,可过滤基于查询的数据表中的结果页面,然后点击下载按钮不返回下载的文件,而不是它只是刷新页面。

这是如何造成的,我该如何解决?

+0

要排除明显的,是你的bean被放置在视图范围内? – BalusC

+0

现在我的bean在请求范围内,是不是? – Hunter

回答

2

如果<p:dataTable>value后面的模型在显示表格的请求与搜索结果和下载文件的请求之间发生了不兼容的变化,则会发生这种情况。如果你的bean被请求作用域,这又会发生。然后,模型会在每个HTTP请求中新建。在表单提交请求期间,JSF需要遍历模型,同时查找并执行数据表中的操作。但是,如果模型与表单显示时的模型不同,那么这将全部失败。如果您在(后)构造函数中正确初始化模型并在(动作)侦听器方法中更改它,并因此在任何getter方法中更改为而不是,则应将该问题解决。视图范围的bean实例所在,只要你postbacking到了同样的观点,因此模型不是在每次请求重新初始化了,但就在同一个横跨将在同一视图的请求被重用。或者,如果由于技术原因确实需要将bean保留在请求范围中,则还需要确保将搜索查询作为请求参数传递,以便可以基于搜索查询。