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 #{…}和${…}在EL语法中有什么区别_Jsf_Jakarta Ee_El - Fatal编程技术网

Jsf #{…}和${…}在EL语法中有什么区别

Jsf #{…}和${…}在EL语法中有什么区别,jsf,jakarta-ee,el,Jsf,Jakarta Ee,El,正如你所看到的,我的问题很简单 在EL语法中,{…}和${…}之间有什么区别 考虑以下两个值表达式: ${book.quantity} #{book.quantity} 第一个使用立即求值语法,而第二个使用延迟求值语法。第一个表达式访问quantity属性,获取其值,然后将该值添加到响应并在页面上呈现。如果在初始请求期间对第二个表达式求值,则会发生同样的情况。在本例中,两个表达式都是右值表达式 请查看Sun的以下两篇精彩文章: 简单地说,${}只能执行获取,而{}可以执行获取和设置值 在遗留

正如你所看到的,我的问题很简单

在EL语法中,
{…}
${…}
之间有什么区别

考虑以下两个值表达式:

${book.quantity}
#{book.quantity}
第一个使用立即求值语法,而第二个使用延迟求值语法。第一个表达式访问quantity属性,获取其值,然后将该值添加到响应并在页面上呈现。如果在初始请求期间对第二个表达式求值,则会发生同样的情况。在本例中,两个表达式都是右值表达式


请查看Sun的以下两篇精彩文章:


简单地说,
${}
只能执行
获取
,而
{}
可以执行
获取
设置值

在遗留JSP上的JSF中,必须使用
#{}
语法来触发托管bean的自动创建,并将请求参数设置为模型值。如果在JSF页面中使用了
${bean.value}
,那么如果名称为
bean
的托管bean不在作用域中,则不会自动创建它。此外,如果表单是在输入组件中使用该值提交的,则不会设置托管bean属性
value

在Facelets上的JSF中,
${}
被重新解释为
#{}
,因此它们的行为完全相同

另见:

    • ${…}
      的结果是一个值,而
      {…}
      的结果是一个绑定。这种绑定可以反复执行

      EL区分了两种绑定;值绑定和方法绑定。值绑定只是普通方法绑定的一种方便,因为它通过一个表达式表示getter和setter

      在某种程度上,
      ${…}
      可以与通过表达式将值传递到方法进行比较:

      foo(bar.kaz());
      
      在运行时,
      bar.kaz()
      被计算,foo只接收返回的值。foo方法对
      bar.kaz()
      一无所知,以后无法再次进行计算

      #{…}
      可以与将lambda传递到方法或旧的匿名内部类相比较:

      foo(new IntegerReturn() { public int execute() {
          bar.kaz();
      });
      

      在这里,foo获得了一个
      IntegerReturn
      ,它可以在需要的时候调用任意多的函数。

      @McDowell:yes。我看到了准确的副本:-S。我相信我们在这里有很好的答案。但是我不确定是否要删除它。嗨!谢谢你的回复。我不太明白你的最后一句话:我从简单的JSF示例中,用
      id=userNo
      h:inputText
      组件的
      value
      属性从
      (延迟)更改为
      $
      (立即),应用程序显然是一样工作的。我遗漏了什么?@fr_andres答案是用JSF-on-JSP编写的。使用Facelet时,它们的行为完全相同。请看上面答案中的“也看”链接。哈哈,我就是这么想的,我错过了答案的日期。谢谢你,我去查一下link@fr_andres这应该让你开始:和。通过“另请参阅”链接继续。每一次。至于关系数据库,我没有特别的偏好。我有PostgreSQL、MySQL和DB2的实际操作经验。他们有自己的一套怪癖,但通常JPA/Hibernate可以处理得很好。@fr_andres我在检索投票或评论时,通常会根据当前的技术状态不断审查和更新我的答案。