当前位置: 首页 > 知识库问答 >
问题:

JSF2 Richfaces 4.3.1,在使用ExtendedDataModel和Arrangeable时多次调用walk方法

洪富
2023-03-14

还要注意,如果我没有immediate=“true”,那么DB命中在阶段2、3、4和6中各发生4次。

我不知道为什么会这样。你能帮个忙吗。

                <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>

开始阶段RESTORE_VIEW 1
结束阶段RESTORE_VIEW 1
开始阶段APPLY_REQUEST_VALUES 2
获取排序->订单业务->未排序
获取排序->订单区域->未排序
获取排序->订单策略->未排序
排列不可用
行走->开始
DB命中
排序前->0last->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]
行走->结束
排序业务->切换->降序到升序
设置排序->排序业务->升序
设置排序->排序区域->未排序
结束阶段APPLY_REQUEST_VALUES 2
开始阶段RENDER_RESPONSE 6
获取排序->排序业务->升序
获取排序->排序区域->未排序
获取排序->排序区域->未排序
获取排序->排序策略->未排序
排列可用
/test.xhtml@53,74 sortby=“#{item.busname}”0last->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

开始阶段RESTORE_VIEW 1
结束阶段RESTORE_VIEW 1
开始阶段APPLY_REQUEST_VALUES 2
获取排序->排序业务->升序
获取排序->排序区域->未排序
获取排序->排序策略->未排序
排列可用
/test.xhtml@53,74 sortby=“#{item.busname}”升序
行走->开始
db命中
排序前->0last->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]
行走->结束
排序业务->切换->升序到降序
设置排序->排序业务->降序
设置排序->排序区域->未排序
结束阶段apply_request_values2
开始阶段RENDER_RESPONSE 6
获取排序->排序业务->降序
获取排序->排序区域->未排序
获取排序->排序区域->未排序
获取排序->排序策略->未排序
排列可用
/test.xhtml@53,74 sortby=“#{item.busname}”降序0last->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

共有1个答案

诸修伟
2023-03-14

看看这个问题。

显然,这是walk方法的预期行为。您应该编写一个幂等方法,也就是说,您应该采取适当的操作只查询DB一次。

但请注意,不仅在分页结果时调用此方法,而且在您调用将结果作为参数的方法时也会调用此方法,例如。我为解决这个问题所做的是验证查询的参数是否已更改,如果更改了,我执行查询并在结果中调用visitor.process方法,否则我只是在当前结果中进行迭代。

 类似资料:
  • 问题内容: 我想我在这里描述的可能有个名字,但我不知道。所以我的第一个问题是要知道这种技术的名称。 这是一个示例:假设您正在网页上实现实时搜索。每次用户在搜索框中键入内容时,您都会触发一个新的搜索查询,并且结果会尽可能频繁地更新。这是一件愚蠢的事情,因为您发送的查询会超出实际需要。每2-3个字母发送一次请求,或者每100 ms最多发送一次请求就足够了。 因此,一种技术是安排在键入键之后立即执行的查

  • 我在使用Java方法时遇到了麻烦。这段代码应该有三种方法。方法1)输入员工人数。方法2)输入每个员工缺勤天数。方法3)计算缺勤天数的平均值。然后,在Main中,应该打印员工人数、缺勤天数和平均缺勤天数。显然,我不明白方法是如何工作的,因为当我运行代码时,用户在提供员工人数、缺勤天数和平均缺勤天数之前,会被询问4倍的员工人数和2倍的员工缺勤天数。如何更改代码,以便用户只需输入一次信息?

  • 我是胡克斯的新手,遇到了一些让我追自己尾巴的案例。 希望有人能解释或提供对我有意义的解决方案: > 下面这个线程:如何调用加载函数与反应使用效果只有一次 我试着在没有依赖性的情况下使用useEffect,eslint不喜欢这样,他们建议添加一个“跳过下一行”,这似乎有点骇人:

  • 问题内容: 这些天,我正在学习JSF + Facelets。我有一个BackingBean和Facelet xHTML页面。当我请求facelet页时(仅一次),backing-bean-method被多次调用。 这可能是什么原因? 我看不到什么特别的东西。提前致谢。 这是方面: 这是支持豆。方法getKunden被多次调用: 问题答案: Bean的getter在那里就 可以 从视图侧 访问 模型

  • 问题内容: 我正在使用Ionic,并且想要根据数据动态更改每个项目的背景色。我以为我可以通过函数调用的方式返回正确的类 目前是控制器 在检查控制台时,列表中的每个函数均被调用7次。这是为什么,我应该避免在其中使用函数调用吗? 问题答案: AngularJS可以进行脏检查:它需要在 每个循环中 调用该函数,以确保它不返回新值,并且不需要更新DOM。 这是框架典型过程的一部分,调用像您这样简单的函数不