jsf中{expr}和${expr}之间的区别是什么?我们应该选择${expr}吗?
我以前读过关于“核心JSF”的区别,但现在我找不到这个地方 尽管如此,我不记得有一个词是关于我们应该在jsf中使用${expr}的情况的。所以我只是好奇(在一个栗子中)有什么区别,以及是否有在JSF应用程序中使用${expr}的情况 来自: 所有使用${}语法的表达式都会立即求值。这些表达式只能在模板文本中使用,或者作为可以接受运行时表达式的JSP标记属性的值使用。 [...] 立即计算表达式始终是只读值表达式。上面显示的表达式只能从cartbean获取总价;它无法设置总价。 延迟求值表达式采用#{expr}形式,可以在页面生命周期的其他阶段求值,这些阶段由使用表达式的任何技术定义。对于JavaServerFaces技术,其控制器可以根据表达式在页面中的使用方式,在生命周期的不同阶段对表达式进行评估。jsf中{expr}和${expr}之间的区别是什么?我们应该选择${expr}吗?,jsf,el,Jsf,El,我以前读过关于“核心JSF”的区别,但现在我找不到这个地方 尽管如此,我不记得有一个词是关于我们应该在jsf中使用${expr}的情况的。所以我只是好奇(在一个栗子中)有什么区别,以及是否有在JSF应用程序中使用${expr}的情况 来自: 所有使用${}语法的表达式都会立即求值。这些表达式只能在模板文本中使用,或者作为可以接受运行时表达式的JSP标记属性的值使用。 [...] 立即计算表达式始终是只读值表达式。上面显示的表达式只能从cartbean获取总价;它无法设置总价。 延迟求值表达式采用
用清晰的语言总结:
${expression}
只执行get,而{expression}
可以执行get和set。这是因为${expression}
只计算一次(立即),而#{expression}
在每次访问时都进行计算(延迟)
在JSF2.0或Facelets1.x上的JSF中,当您将这样的内容作为页面的第一个表达式时
${bean.property}
#{bean.property}
当bean
是一个请求范围的托管bean时,您将什么也看不到。但是如果bean
是会话范围的托管bean,并且之前已经创建过,那么您将看到正在打印的属性值。如果请求范围的托管bean是在同一页面中由#{bean.xxx}
创建的,那么这也适用
如果改为作为页面的第一个表达式
${bean.property}
#{bean.property}
然后EL将测试bean
是否为空,如果为空,则它将设置(创建)一个新的。如果该属性是在bean构造期间设置的,那么您将看到该表达式显示的属性
这一切对于获得其他JSF组件来说都是必须的,比如说工作。提交表单时,{expression}
将设置bean中的值