6

我还不清楚JSF immediate evaluationvs的使用方法deferred evaluation,主要是网上的例子几乎没有使用过前一种方法。

我已经看过相当多的 JSF 示例,包括http://docs.oracle.com/javaee/6/tutorial/doc/中包含的示例,我对我几乎只看到过与#{}而不是${}, 即使我们所做的只是读取一个 bean 属性。

从我对这两种用途的理解来看,${}只能用来读取bean属性,不能用来写。我还没有找到一个明确的解释,说明immediatevsdeferred评估在 JSF 生命周期方面的确切差异以及读取 bean 属性会产生什么差异。

如果大家总是使用#{}来读取 bean 属性,你会推荐什么时候使用${}

所以,总结一下:

  • 为什么每个人在阅读 bean 属性时似乎#{}喜欢${}
  • 你什么时候建议使用${}代替#{}
  • 你能给我一个例子,说明 using${}与 using#{}的结果不同(你能解释为什么结果不同)吗?
4

1 回答 1

9

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

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

也可以看看:

于 2013-03-20T14:41:00.527 回答