读取bean属性的立即vs延迟评估

时间:2013-03-20 14:35:42

标签: jsf el managed-bean

我仍然不清楚使用JSF immediate evaluation vs deferred evaluation,主要是因为在线示例几乎从未使用过前一种方法。

我已经看到了相当数量的JSF示例,包括http://docs.oracle.com/javaee/6/tutorial/doc/中包含的示例,我有点感到困惑的是,我几乎只看到#{}代替{{1}的示例即使我们所做的只是读取bean属性。

根据我对这两种用法的理解,${}只能用于读取bean属性,而不能用于写入。我还没有找到关于JSF生命周期${}immediate评估的确切差异的明确解释,以及读取bean属性会有什么不同。

如果每个人都使用deferred来阅读bean属性,那么您何时会建议使用#{}

所以,总结一下:

  • 读取 bean属性时,为什么每个人似乎都更喜欢${}而不是#{}
  • 您建议何时使用${}代替${}
  • 您能否举例说明使用#{}与使用${}会产生什么不同的结果?(您能解释为什么结果不同)吗?

1 个答案:

答案 0 :(得分:10)

在Facelets中,${}被视为#{},因此技术上没有区别,而且总是延迟。

在JSP 2.0及更早版本中,${}在托管bean不在范围内时不会自动创建托管bean。因此,只有在可以保证在组件树中之前的某处使用同一个托管bean上的#{}并且还考虑view build time vs view render time生命周期时,才能使用它。在所有JSP版本中,${}都无法在模型中设置JSF输入组件的提交值。总而言之,混合它们可能会让初学者感到困惑,长期来说甚至也会让你自己感到困惑,因此不推荐。

另见: