jsf - 一个jsf页面和一个托管bean之间,为什么getter方法被调用了两次

标签 jsf managed javabeans

我有一个带有表单的 jsf 页面,其中有一个输出文本。 outputtext 组件的值是从支持 bean(或托管 bean)调用的。我知道当我将其编码为 #{MyBean.myString}
Jsf 重命名它并调用 getMyString() 方法。然而奇怪的是,当我在这个组件的 getter 方法中放置一个断点时,我看到它在页面被渲染期间被调用了两次。
输出文本采用 h:form,它是唯一绑定(bind)到 backingbean 的组件。我的意思是,jsf 应该在第一次访问 getter 方法时获取值,但它需要两次访问 getter 方法,这太奇怪了。
你能解释一下jsf中这种行为的原因是什么吗?

任何帮助,将不胜感激,
最良好的祝愿,
巴里斯

最佳答案

getter,正如它的名字已经自我描述的那样,只是为了检索数据而存在的。 JSF 不缓存这些数据。它会在需要时调用它。调用 getter 的成本实际上是零——除非你做的不仅仅是返回数据,例如每次都访问数据库,然后应该将这个逻辑移出 getter 或变成延迟加载。

在表单提交的情况下,通常会在验证阶段触发第一个 get 调用,以检查是否有任何初始值,以便 JSF 可以处理值更改事件。第二个调用通常在渲染响应阶段触发,以在 View 中显示模型值。

您可以找到 this article对于了解有关 JSF 生命周期的更多信息也很有用。您可以找到 this answer有助于了解有关在支持 bean 中进行预处理/初始化的方法的更多信息。

关于jsf - 一个jsf页面和一个托管bean之间,为什么getter方法被调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2786834/

相关文章:

css - 在 Primefaces Grid CSS 中支持偏移列 StyleClass?

string - EL 中的字符串使用单引号或双引号

spring - 无法在 spring 中将 bean 注入(inject)具有特定名称的 JSF 托管 bean

c# - 捕捉引擎ExecutionException

java - 如何获取我的java bean中嵌套对象的值?

java - Spring 从实体访问属性的方式是什么?

ios - 为什么在 MVC 中将导航规则与代码分开

java - 高级搜索 Java 库

solr - managed-schema 和 schema.xml 有什么区别

java - Spring 3 为 ThreadPoolTask​​Executor 设置 ThreadFactory