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