【问题标题】:How to set values using JSP Expression Language without JSTL <c:set> tag?如何使用没有 JSTL <c:set> 标签的 JSP 表达式语言设置值?
【发布时间】:2013-08-08 13:17:52
【问题描述】:

我可以使用${session.name} 获得一个值。有没有办法使用表达式语言在 JSP 中设置值?我问的不是&lt;c:set&gt; 标签。

${param.name}
${session.name}
${request.hhh} 

我们以这种方式获取值,我们可以使用相同的方式设置这些值吗?

请举例说明。

【问题讨论】:

  • &lt;c:set&gt; 怎么做。你为什么不想使用它?
  • 我只是在学习jsp。我读过一篇文章,因为我们可以使用 EL 来设置和获取值,他们展示了上面的例子来获取,我试过了,效果很好。但我想知道如何使用设定值。除了 c:set 没有别的办法吗?如果是这样就说出来..

标签: jsp el


【解决方案1】:

EL 语法的目的是非常少的,它旨在显示和格式化数据,而不是更改数据。这样做的原因是鼓励使用 MVC 方法,在这种方法中,在显示任何内容之前已经处理了业务逻辑。它还具有易于学习的优点,即使对于非程序员也是如此。

&lt;c:set&gt; 是这样做的方法。 EL 没有等价物。

【讨论】:

    【解决方案2】:

    这只有在使用 = 运算符的 EL 3.0(2013 年 5 月在 Java EE 7 中引入)之后才有可能。

    ${param.name = "123"}
    ${session.name = "abc"}
    ${request.hhh = "xyz"}
    

    【讨论】:

    • 他想要的是使用相同的旧(和恐龙)方式 getter ${param.name} 来设置参数值。我的回答显示如何 ${param.name="123"},但它有一个缺点:字符会显示,因为 ${} 会评估里面的内容并返回它。
    【解决方案3】:
    ${myVariable = "666" ; ""}
    

    来自EL 3.0 spec 1.14 节:

    分号运算符 - A ; B

    分号运算符的行为类似于 C 中的逗号运算符。 要评估A;B,首先评估A,然后丢弃它的值。 然后评估B 并返回其值。

    所以我们评估一个赋值,丢弃该结果并评估并返回一个空字符串。

    【讨论】:

      【解决方案4】:

      标准 JSP/JSTL 特性支持 3 种方式来设置 bean 属性或 Map 的值。

      1. c:set(适用于 java bean 和 java map)
      2. jsp:setProperty(仅适用于 java bean 属性。不是 MAP)
      3. jsp无脚本(用jsp写java代码)

      【讨论】:

        【解决方案5】:

        来自here: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。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-17
          • 1970-01-01
          • 1970-01-01
          • 2014-05-29
          • 2013-12-28
          • 2020-09-19
          相关资源
          最近更新 更多