我可以使用${session.name}
. 有没有办法使用表达式语言在 JSP 中设置值?我不是在问使用<c:set>
标签。
${param.name}
${session.name}
${request.hhh}
我们以这种方式获取值,我们可以使用相同的方式设置这些值吗?
请举例说明。
EL 语法是有意为之的,它旨在显示和格式化数据,而不是更改数据。这样做的原因是鼓励使用 MVC 方法,在这种方法中,在显示任何内容之前已经处理了业务逻辑。它还具有易于学习的优点,即使对于非程序员也是如此。
<c:set>
是这样做的方法。EL 没有等价物。
这只有在使用=
运算符的 EL 3.0(于 2013 年 5 月在 Java EE 7 中引入)之后才有可能。
${param.name = "123"}
${session.name = "abc"}
${request.hhh = "xyz"}
${myVariable = "666" ; ""}
从EL 3.0 规范第 1.14 节:
分号运算符 -
A ; B
分号运算符的行为类似于 C 中的逗号运算符。要评估
A;B
,A
首先评估它的值,然后丢弃它的值。B
然后评估并返回其值。
因此,我们评估一个分配,丢弃该结果并评估并返回一个空字符串。
标准 JSP/JSTL 特性支持 3 种方式来设置 bean 属性或 Map 的值。
从这里开始:EL 3.0(JSR 341,Java EE 7 的一部分)代表了 EL 2.2 的重大提升。EL 3.0的主要特点如下:
New operators +, =, and ; Lambda expressions Collection objects support An API for standalone environments
使用赋值运算符
在 x = y 类型的表达式中,赋值运算符 (=) 将 y 的值赋给 x。为了避免 PropertyNotWritableException 类型的错误,x 值必须是左值。以下示例向您展示了如何在两个简单的表达式中使用此运算符:
#{x = 3} evaluates to 3
#{y = x + 5} evaluates to 8
赋值运算符是右结合的(z = y = x 等价于 z = (y = x))。例如,#{z = y = x + 4} 的计算结果为 7。