UPDATE II: 好的,我设法缩小了一点。请求范围的bean和数据模型初始化?
我有一个带有排序和筛选功能的数据表的页面,这两个页面都发生在数据库中。换句话说,我不使用rich:datatable的嵌入式功能,而是让数据库完成这项工作。
我与请求范围豆一起工作。唯一的会话范围的bean包含我的界面的排序和过滤。
每个列的过滤都绑定到特定的会话bean字段。因此,它实际上在更新模型值阶段更新。
排序需要我的部分逻辑,所以我调用一个特定的方法来设置会话bean的正确值。这是在调用应用程序阶段执行的。
因此,在页面实际呈现的渲染响应阶段,所有更改都已到位。
的问题是,在我的页面中的JSF DataTable,并datascroller调用获取从数据库中的数据和dataModel.getRowCount()
(我已经实现调用运行一个单独的查询方法)的期间也的backingBean.getDataModel()
应用请求值阶段。这两个查询也将在渲染响应阶段进行,这是更改全部到位的唯一阶段,查询将正常运行。
这意味着要在执行过滤或排序后显示页面,会发生双重查询。
我想执行排序和筛选只执行所需的查询,没有更多。
有什么建议吗?
我看不到排序/过滤失败,因为你懒洋洋地加载数据。我也没有看到如何将它移动到渲染响应中来解决它(顺便说一下,在getter中使用基于'FacesContext#getRenderResponse()'的延迟加载,而不是整个'Phaselistener')更容易解决这个问题。你能否详细说明实际问题? – BalusC 2010-02-26 17:45:06
感谢您的评论。请参阅上面的更新! – 2010-03-01 08:55:41
目前仍不清楚为什么排序/过滤失败,“因为你懒洋洋地加载了数据”。至于你的抱怨,“getRenderResponse()似乎不起作用”,你确定它不是因为super.getDataModel()不为空而引起的吗?你为什么要检查它? – BalusC 2010-03-01 13:20:37