Jsf 何时计算ui:fragment呈现属性

Jsf 何时计算ui:fragment呈现属性,jsf,jsf-2,Jsf,Jsf 2,是在JSF生命周期的每个阶段评估ui:fragment的呈现属性。我确信它会像我所期望的那样在RENDER\u响应阶段进行评估,但它不是也会通过APPLY\u REQUEST\u值、PROCESS\u验证、UPDATE\u MODEL\u值和INVOKE\u应用程序进行评估吗 原因是我们根据数据库中的数据呈现一些ui:fragment。这是我们创作的标签。如果数据库中有一些数据,我们只呈现ui:fragment的内容,即编写的标记。是否有某种方法可以避免所有这些调用,并且在每个请求-响应生命周期

是在JSF生命周期的每个阶段评估ui:fragment的呈现属性。我确信它会像我所期望的那样在RENDER\u响应阶段进行评估,但它不是也会通过APPLY\u REQUEST\u值、PROCESS\u验证、UPDATE\u MODEL\u值和INVOKE\u应用程序进行评估吗

原因是我们根据数据库中的数据呈现一些ui:fragment。这是我们创作的标签。如果数据库中有一些数据,我们只呈现ui:fragment的内容,即编写的标记。是否有某种方法可以避免所有这些调用,并且在每个请求-响应生命周期中只执行一次。这就是它看起来的样子

<ui:fragment rendered="{some values exist in db}">
   <ourtags:sometag>
</ui:fragment>

这取决于孩子们。如果存在
UIInput
子项,则也会在应用请求值、验证和更新模型值阶段对其进行评估。如果存在
UICommand
子项,则在应用请求值和调用应用程序阶段也会对其进行评估。这一切都是防止伪造请求的一部分,最终用户(读:黑客)试图操纵提交数据的处理方式

至于具体的问题,只是不要在getter方法中使用业务逻辑。Getter方法不应与数据库交互。它们不是为你准备的。正如其名称所说,Getter方法应该只返回已经准备好的数据。您需要在bean的构造函数或
@PostConstruct
方法中执行业务逻辑,并将其分配给属性。getter方法应该只返回该属性。那么它被调用的频率就完全不重要了

另见:

非常感谢你,巴卢斯克。我不知道你是怎么做到的,但你似乎总是知道正确的答案。