我仍然不清楚使用JSF immediate evaluation
vs deferred evaluation
,主要是因为在线示例几乎从未使用过前一种方法。
我已经看到了相当数量的JSF示例,包括http://docs.oracle.com/javaee/6/tutorial/doc/中包含的示例,我有点感到困惑的是,我几乎只看到#{}
代替{{1}的示例即使我们所做的只是读取bean属性。
根据我对这两种用法的理解,${}
只能用于读取bean属性,而不能用于写入。我还没有找到关于JSF生命周期${}
与immediate
评估的确切差异的明确解释,以及读取bean属性会有什么不同。
如果每个人都使用deferred
来阅读bean属性,那么您何时会建议使用#{}
?
所以,总结一下:
${}
而不是#{}
?${}
代替${}
?#{}
与使用${}
会产生什么不同的结果?(您能解释为什么结果不同)吗?答案 0 :(得分:10)
在Facelets中,${}
被视为#{}
,因此技术上没有区别,而且总是延迟。
在JSP 2.0及更早版本中,${}
在托管bean不在范围内时不会自动创建托管bean。因此,只有在可以保证在组件树中之前的某处使用同一个托管bean上的#{}
并且还考虑view build time vs view render time生命周期时,才能使用它。在所有JSP版本中,${}
都无法在模型中设置JSF输入组件的提交值。总而言之,混合它们可能会让初学者感到困惑,长期来说甚至也会让你自己感到困惑,因此不推荐。