jsf中#{expr}和${expr}有什么区别?在某些情况下我们应该更喜欢 ${expr} 吗? [复制]

2023-12-30

我前一段时间读过有关“Core JSF”的差异的内容,但现在我找不到那个地方。

不过,我不记得有一句话提到我们应该在 jsf 中使用 ${expr} 的情况。所以我只是好奇有什么区别(举个栗子)以及是否有在 JSF 应用程序中使用 ${expr} 的情况?


用清晰的语言总结一下:${expression}只做get, while #{expression}可以两者兼得get and set。这是因为${expression}仅评估一次(立即),而#{expression}每次访问时都会进行评估(延迟)。

在 JSP 2.0 或 Facelets 1.x 上的 JSF 中,当您将类似这样的内容作为页面的第一个表达式时

${bean.property}

where bean是一个请求范围的托管 bean,您将看到nothing。但如果bean是一个会话范围的托管 bean 并且之前已经创建过,那么您将看到正在打印的属性值。如果请求范围的托管 Bean 是之前创建的,则这也适用#{bean.xxx}在同一页面中。

如果您改为作为页面的第一个表达式

#{bean.property}

那么 EL 将测试是否bean为空,如果是,那么它将set(创建)一个新的。如果该属性是在 bean 构造期间设置的,那么您将看到该表达式显示该属性。

这一切对于获取 JSF 都是强制性的UIInput http://java.sun.com/javaee/5/docs/api/javax/faces/component/UIInput.html组件如<h:inputText> http://java.sun.com/javaee/javaserverfaces/1.2_MR1/docs/tlddocs/h/inputText.html上班。当您提交表格时,#{expression} will setbean 中的值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jsf中#{expr}和${expr}有什么区别?在某些情况下我们应该更喜欢 ${expr} 吗? [复制] 的相关文章

随机推荐