【发布时间】:2013-04-03 08:11:26
【问题描述】:
我正在尝试加载带有分页和排序的数据表。使用 ExtendedDataModel 和 Arrangeable 来实现这一点,它工作正常。
然后我添加了 Phase Listener 来检查行为并注意到
1。分页工作正常,只有一个 DB Hit。
2。但是,虽然 Sorting DB Hit 发生了两次,第一次在第 2 阶段,第二次在第 6 阶段。
另请注意,如果我没有立即 =“true”,则 DB HIT 在第 2、3、4 和 6 阶段各发生 4 次。
我不确定为什么会这样。你能帮忙吗?
xhtml sn-p
<rich:column sortBy="#{item.busName}" sortOrder="#{sortBean.order}">
<f:facet name="header">
<a4j:commandLink value="BUSINESS NAME" action="#{sortBean.sortByBus}" immediate="true"
render="riskData" />
</f:facet>
<h:outputText value="#{item.busName}">
</h:outputText>
</rich:column>
<rich:column sortBy="#{item.regionName}" sortOrder="#{sortBean.orderRegion}">
<f:facet name="header">
<a4j:commandLink value="REGION NAME"
action="#{sortBean.sortByRegion}" immediate="true"
render="riskData" />
</f:facet>
<h:outputText value="#{item.regionName}">
</h:outputText>
</rich:column>
---------带有 SYSOUTS 的阶段侦听器日志----------
具有未排序值的页面初始视图只有一个 DB HIT 来获取数据###
开始阶段 RESTORE_VIEW 1
结束阶段 RESTORE_VIEW 1
开始阶段 RENDER_RESPONSE 6
获取排序 -> 订单业务 -> 未排序
获取排序 -> 排序区域 -> 未排序
获取排序 -> 订单策略Dt -> 未排序
安排不可用
总计数 DB HIT
数据创建
获取排序 -> 订单业务 -> 未排序
获取排序 -> 排序区域 -> 未排序
获取排序 -> 订单策略Dt -> 未排序
安排不可用
步行 -> 开始
DB HIT
第一个 -> 0最后一个 -> 3
排序前 -> [com.entity.BusItem@514cef, com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8]
排序列表之前
排序后 -> [com.entity.BusItem@514cef, com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8]
步行 -> 结束
结束阶段 RENDER_RESPONSE 6
BusinessName Unsorted Ascending Sort 有两个 DB HIT -> 第一个在 Phase2 和第二个在 Phase 6 ###
开始阶段 RESTORE_VIEW 1
结束阶段 RESTORE_VIEW 1
开始阶段 APPLY_REQUEST_VALUES 2
获取排序 -> 订单业务 -> 未排序
获取排序 -> 排序区域 -> 未排序
获取排序 -> 订单策略Dt -> 未排序
安排不可用
步行 -> 开始
DB HIT
第一个 -> 0最后一个 -> 3
排序前 -> [com.entity.BusItem@514cef, com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8]
排序列表之前
排序后 -> [com.entity.BusItem@514cef, com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8]
步行 -> 结束
对业务排序 -> 切换 -> 降序到升序
设置排序 -> 订单业务 -> 升序
设置排序 -> 订单 PolicyDt -> 未排序
设置排序 -> 排序区域 -> 未排序
END PHASE APPLY_REQUEST_VALUES 2
开始阶段 RENDER_RESPONSE 6
获取排序 -> 订单业务 -> 升序
获取排序 -> 排序区域 -> 未排序
获取排序 -> 订单策略Dt -> 未排序
安排可用
/test.xhtml @53,74 sortBy="#{item.busName}"升序
获取排序 -> 订单业务 -> 升序
获取排序 -> 排序区域 -> 未排序
获取排序 -> 订单策略Dt -> 未排序
安排可用
/test.xhtml @53,74 sortBy="#{item.busName}"升序
步行 -> 开始
DB HIT
第一个 -> 0最后一个 -> 3
排序前 -> [com.entity.BusItem@514cef, com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8]
排序列表之前
排序后 -> [com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8, com.entity.BusItem@514cef]
步行 -> 结束
结束阶段 RENDER_RESPONSE 6
BusinessName 升序到降序 -> 在 Phase2 中有两个 DB HIT,第 2 个在 Phase2 ###
开始阶段 RESTORE_VIEW 1
结束阶段 RESTORE_VIEW 1
开始阶段 APPLY_REQUEST_VALUES 2
获取排序 -> 订单业务 -> 升序
获取排序 -> 排序区域 -> 未排序
获取排序 -> 订单策略Dt -> 未排序
安排可用
/test.xhtml @53,74 sortBy="#{item.busName}"升序
步行 -> 开始
DB HIT
第一个 -> 0最后一个 -> 3
排序前 -> [com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8, com.entity.BusItem@514cef]
排序列表之前
排序后 -> [com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8, com.entity.BusItem@514cef]
步行 -> 结束
对业务排序 -> 切换 -> 从升序到降序
设置排序 -> 订单业务 -> 降序
设置排序 -> 订单 PolicyDt -> 未排序
设置排序 -> 排序区域 -> 未排序
END PHASE APPLY_REQUEST_VALUES 2
开始阶段 RENDER_RESPONSE 6
获取排序 -> 订单业务 -> 降序
获取排序 -> 排序区域 -> 未排序
获取排序 -> 订单策略Dt -> 未排序
安排可用
/test.xhtml @53,74 sortBy="#{item.busName}"降序
获取排序 -> 订单业务 -> 降序
获取排序 -> 排序区域 -> 未排序
获取排序 -> 订单策略Dt -> 未排序
安排可用
/test.xhtml @53,74 sortBy="#{item.busName}"降序
步行 -> 开始
DB HIT
第一个 -> 0最后一个 -> 3
排序前 -> [com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8, com.entity.BusItem@514cef]
排序列表之前
排序后 -> [com.entity.BusItem@514cef, com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8]
步行 -> 结束
结束阶段 RENDER_RESPONSE 6
删除立即数,然后对业务名称进行排序,在 Phase2、3、4 和 6 中各有四个 DB HIT
开始阶段 RESTORE_VIEW 1
结束阶段 RESTORE_VIEW 1
开始阶段 APPLY_REQUEST_VALUES 2
获取排序 -> 订单业务 -> 未排序
获取排序 -> 排序区域 -> 未排序
获取排序 -> 订单策略Dt -> 未排序
安排不可用
步行 -> 开始
DB HIT
第一个 -> 0最后一个 -> 3
排序前 -> [com.entity.BusItem@514cef, com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8]
排序列表之前
排序后 -> [com.entity.BusItem@514cef, com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8]
步行 -> 结束
END PHASE APPLY_REQUEST_VALUES 2
开始阶段 PROCESS_VALIDATIONS 3
步行 -> 开始
DB HIT
第一个 -> 0最后一个 -> 3
排序前 -> [com.entity.BusItem@514cef, com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8]
排序列表之前
排序后 -> [com.entity.BusItem@514cef, com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8]
步行 -> 结束
结束阶段 PROCESS_VALIDATIONS 3
开始阶段 UPDATE_MODEL_VALUES 4
步行 -> 开始
DB HIT
第一个 -> 0最后一个 -> 3
排序前 -> [com.entity.BusItem@514cef, com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8]
排序列表之前
排序后 -> [com.entity.BusItem@514cef, com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8]
步行 -> 结束
结束阶段 UPDATE_MODEL_VALUES 4
开始阶段 INVOKE_APPLICATION 5
排序区域->切换->降序到升序
设置排序 -> 排序区域 -> 升序
设置排序 -> 订单业务 -> 未排序
设置排序 -> 订单 PolicyDt -> 未排序
结束阶段 INVOKE_APPLICATION 5
开始阶段 RENDER_RESPONSE 6
获取排序 -> 订单业务 -> 未排序
获取排序 -> 排序区域 -> 升序
获取排序 -> 订单策略Dt -> 未排序
安排可用
/footer.xhtml @62,83 sortBy="#{item.regionName}"升序
获取排序 -> 订单业务 -> 未排序
获取排序 -> 排序区域 -> 升序
获取排序 -> 订单策略Dt -> 未排序
安排可用
/footer.xhtml @62,83 sortBy="#{item.regionName}"升序
步行 -> 开始
DB HIT
第一个 -> 0最后一个 -> 3
排序前 -> [com.entity.BusItem@514cef, com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8]
排序列表之前
排序后 -> [com.entity.BusItem@514cef, com.entity.BusItem@1921eac, com.entity.BusItem@1bcdc8]
步行 -> 结束
结束阶段 RENDER_RESPONSE 6
【问题讨论】:
-
您是否在 getter 中从 DB 中获取数据?
-
@johny Nope... DB Hit 在extendedDataModel 的walk 方法中。
-
对此的任何帮助都会非常有用!!!
标签: sorting jsf-2 richfaces richdatatable