#{…}和${..}在EL语法中

  • 本文关键字:语法 EL jsf jakarta-ee el
  • 更新时间 :
  • 英文 :


你可以看到,我的问题很简单。

在EL语法中#{...}${...}有什么区别?

简单地说,${}只能做一个get,而#{}可以做一个get set

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

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

参见:

  • JSP EL、JSF EL和统一EL的区别

${...}的结果是一个值,#{...}的结果是一个绑定。这个绑定可以一次又一次地执行。

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

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

foo(bar.kaz());

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

#{...}可以与将lambda传递给方法或旧的匿名内部类进行比较:

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

在这里,foo得到一个IntegerReturn,它可以在它想要的时间调用它想要的次数。

右起

考虑以下两个值表达式:

${book.quantity}
#{book.quantity}

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

看看Sun的这两篇很棒的文章:

Web层与Java EE 5: JSP 2.1技术的新特性总结

统一表达语言

相关内容

  • 没有找到相关文章

最新更新