Jsf #{…}和${…}在EL语法中有什么区别
正如你所看到的,我的问题很简单 在EL语法中,Jsf #{…}和${…}在EL语法中有什么区别,jsf,jakarta-ee,el,Jsf,Jakarta Ee,El,正如你所看到的,我的问题很简单 在EL语法中,{…}和${…}之间有什么区别 考虑以下两个值表达式: ${book.quantity} #{book.quantity} 第一个使用立即求值语法,而第二个使用延迟求值语法。第一个表达式访问quantity属性,获取其值,然后将该值添加到响应并在页面上呈现。如果在初始请求期间对第二个表达式求值,则会发生同样的情况。在本例中,两个表达式都是右值表达式 请查看Sun的以下两篇精彩文章: 简单地说,${}只能执行获取,而{}可以执行获取和设置值 在遗留
{…}
和${…}
之间有什么区别
考虑以下两个值表达式:
${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我在检索投票或评论时,通常会根据当前的技术状态不断审查和更新我的答案。