繁体   English   中英

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

[英]Between a jsf page and a managed bean, why the getter method is called twice

我有一个带有表单的jsf页面,其中包含一个outputtext。 outputtext组件的值是从辅助bean(或托管bean)调用的。 我知道当我将其编码为#{MyBean.myString}时,Jsf将其重命名并调用getMyString()方法。 然而,奇怪的是,当我将断点放到此组件的getter方法时,我看到它在页面呈现期间被调用了两次。 outputtext在ah:form中,它是唯一绑定到backingbean的组件。 我的意思是,jsf在第一次进入getter方法时应该得到它是如此奇怪,但它需要两次进入getter方法。 你能解释一下jsf中这种行为的原因是什么吗?

任何帮助将不胜感激,祝福,巴里斯

正如其名称已经自我描述的那样,getter只是用于检索数据的纯粹目的。 JSF不会缓存此数据。 它会在需要时调用它。 调用getter的成本实际上是无法实现的 - 除了你做的不仅仅是返回数据,例如每次点击数据库,这个逻辑应该被移出getter或者变成延迟加载。

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

您可能会发现本文也很有用,可以了解有关JSF生命周期的更多信息。 您可能会发现此答案对于了解有关在辅助bean中进行预处理/初始化的方法的更多信息非常有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM