【问题标题】:Struts2 Access specific index of list when index is a variable当索引是变量时,Struts2访问列表的特定索引
【发布时间】:2013-04-08 14:53:48
【问题描述】:

当索引是变量时,我在访问列表的特定元素时遇到了一些问题。

当索引只是一个数字时,显示我要查找的内容完全没有问题。

<s:property value="#session.userList[1].email" />

完美运行,并显示在 UserList 的该元素中找到的电子邮件

但是,当我将索引更改为变量时,我很难找到编写 ognl 语句的正确方法。我已经尝试了所有我能想到的 %# 组合,但都没有运气。

<s:set var="userIndex" >${param.index}</s:set>
<s:property value="#session.userList[#userIndex].email" />

我应该如何格式化我的 ognl 语句?

【问题讨论】:

  • 就是这样的字符串。正如 Roman 所说,使用 value 属性。像这样的东西调试起来很简单,因为您可以查看您设置的值的类型。
  • @DaveNewton 对,值保持类型,但如果我正确,参数将转换为字符串并返回值。
  • 参数是字符串,但即使不是,当一个值是参数标签的body时,它总是一个字符串。当它被评估为一个值 attribute 然后它被评估为任何 ognl 表达式是

标签: java jsp struts2 ognl


【解决方案1】:

你应该像下面这个例子那样格式化它:

<s:set var="userIndex" value="%{@java.lang.Integer@valueOf(#parameters.index)}" />
<s:property value="%{#session.userList[#userIndex].email}" />

如果您正在使用 struts 标签,最好使用 OGNL 而不是 EL 来评估表达式。强制 OGNL 评估整个表达式而不是部分。

需要将变量的值转换为整数类型。用于名称的字符串类型。

【讨论】:

    【解决方案2】:

    你也可以使用

    <s:set var="index" value="%{@java.lang.Integer@valueOf(#row.index)}" />
    

    这是为索引设置一个整数值

    然后您可以访问列表的特定值

    <s:property value="%{yourListObject.get(#index).yourField}" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 2013-02-12
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 2021-03-29
      相关资源
      最近更新 更多