读取bean属性的即时与延迟计算



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

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

从我对这两种用法的理解来看,${}只能用于读取bean属性,不能用于写入。我还没有找到关于immediatedeferred评估在JSF生命周期方面的确切区别的清晰解释,以及它们对读取bean属性有什么不同。

如果每个人都使用#{}来读取bean属性,你会建议什么时候使用${}呢?

所以,总结一下:

  • 为什么当读取 bean属性时,每个人似乎都更喜欢#{}而不是${} ?
  • 你建议什么时候用${}代替#{} ?
  • 你能给我一个例子,在哪里使用${}会有不同的结果从使用#{}(你能解释为什么结果是不同的)?

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

在JSP 2.0及更早版本中,当托管bean还不在作用域中时,${}不会自动创建托管bean。因此,只有在您能够保证同一个托管bean上的#{}在组件树中的之前的某个地方被使用,并且还考虑到视图构建时间与视图呈现时间生命周期时,您才能使用它。在所有JSP版本中,${}都不能设置模型中JSF输入组件的提交值。总而言之,混合它们可能会让初学者感到困惑,长期使用甚至会让你自己感到困惑,因此不建议使用。

参见:

  • JSP EL、JSF EL和统一EL的区别

相关内容

  • 没有找到相关文章

最新更新