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

Stu*_*ent 4 jsf el managed-bean

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

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

从我对这两个用途的理解,${}只能用于读取bean属性,而不是用于编写.我还没有找到关于JSF生命周期的immediatevs deferred评估的确切差异以及读取bean属性会有什么区别的明确解释.

如果每个人总是使用#{}for read bean属性,你何时会推荐使用${}

所以,总结一下:

  • 为什么大家都似乎更喜欢#{}${}读取 bean的属性?
  • 你什么时候建议使用${}而不是#{}
  • 你能给我一个例子,说明使用的${}结果与使用#{}的结果不同(你可以解释为什么结果不同)?

Bal*_*usC 10

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

在JSP 2.0及更早版本中,${}当托管bean不在范围内时,它不会自动创建托管bean.因此,如果您可以保证在组件树之前#{}某个地方使用相同的托管bean ,并且还考虑视图构建时间与视图渲染时间生命周期,则只能使用它.在所有JSP版本中,${}都无法在模型中设置JSF输入组件的提交值.总而言之,混合它们可能会让初学者感到困惑,从长远来看甚至也会让你自己感到困惑,因此不推荐.

也可以看看: