Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jsf中{expr}和${expr}之间的区别是什么?我们应该选择${expr}吗?_Jsf_El - Fatal编程技术网

jsf中{expr}和${expr}之间的区别是什么?我们应该选择${expr}吗?

jsf中{expr}和${expr}之间的区别是什么?我们应该选择${expr}吗?,jsf,el,Jsf,El,我以前读过关于“核心JSF”的区别,但现在我找不到这个地方 尽管如此,我不记得有一个词是关于我们应该在jsf中使用${expr}的情况的。所以我只是好奇(在一个栗子中)有什么区别,以及是否有在JSF应用程序中使用${expr}的情况 来自: 所有使用${}语法的表达式都会立即求值。这些表达式只能在模板文本中使用,或者作为可以接受运行时表达式的JSP标记属性的值使用。 [...] 立即计算表达式始终是只读值表达式。上面显示的表达式只能从cartbean获取总价;它无法设置总价。 延迟求值表达式采用

我以前读过关于“核心JSF”的区别,但现在我找不到这个地方

尽管如此,我不记得有一个词是关于我们应该在jsf中使用${expr}的情况的。所以我只是好奇(在一个栗子中)有什么区别,以及是否有在JSF应用程序中使用${expr}的情况

来自:

所有使用${}语法的表达式都会立即求值。这些表达式只能在模板文本中使用,或者作为可以接受运行时表达式的JSP标记属性的值使用。 [...] 立即计算表达式始终是只读值表达式。上面显示的表达式只能从cartbean获取总价;它无法设置总价。 延迟求值表达式采用#{expr}形式,可以在页面生命周期的其他阶段求值,这些阶段由使用表达式的任何技术定义。对于JavaServerFaces技术,其控制器可以根据表达式在页面中的使用方式,在生命周期的不同阶段对表达式进行评估。
用清晰的语言总结:
${expression}
只执行get,而
{expression}
可以执行getset。这是因为
${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中的值