是否在JSF生命周期的每个阶段评估了ui:fragment的呈现属性。我确信它会在RENDER_RESPONSE阶段进行评估,正如我所期望的那样,但它也不是通过APPLY_REQUEST_VALUES,PROCESS_VALIDATIONS,UPDATE_MODEL_VALUES和INVOKE_APPLICATION进行评估。
原因是我们根据数据库中的数据渲染一些ui:fragment。这是我们撰写的标签。如果数据库中有一些数据,我们只渲染ui:fragment的内容,即创作的标记。有没有办法避免所有这些调用,并且每个请求 - 响应生命周期只执行一次。这就是它的样子
<ui:fragment rendered="{some values exist in db}">
<ourtags:sometag>
</ui:fragment>
答案 0 :(得分:3)
这取决于孩子们。如果有UIInput
个子项,则还会在应用请求值,验证和更新模型值阶段期间对其进行评估。如果有UICommand
个子项,那么它也会在应用请求值期间进行评估并调用应用程序阶段。这一切都是防止伪造请求的一部分,其中最终用户(读取:黑客)试图操纵提交数据的处理方式。
至于具体问题,只是不要在getter方法中做业务逻辑。 Getter方法不应与数据库交互。他们不是为了。正如他们的名字所说,Getter方法应该只返回已经准备好的数据。您需要在bean的构造函数或@PostConstruct
方法中执行业务逻辑,并将其分配给属性。 getter方法应该只返回该属性。然后调用它的频率并不重要。