【问题标题】:Struts2 iterator tag - access specific object value from list of objectsStruts2 迭代器标签 - 从对象列表中访问特定对象值
【发布时间】:2014-07-03 01:27:34
【问题描述】:

有没有办法从对象列表中访问特定对象的属性。

我有一个 Lab 列表,每个 Lab 对象都有多个属性。使用标签,我们可以从实验室列表中访问 Lab1 对象的属性 1 的值吗?

假设:我的一个Lab 对象有一个名为labname 的属性,其值为“BP”,而另一个实验室对象的labname 为“A1c”。
现在,如果我想以labname为“BP”访问lab对象的labvalue属性,我该如何实现呢?

【问题讨论】:

    标签: list jsp struts2 iterator ognl


    【解决方案1】:

    希望这会有所帮助

    将列表赋予 s:iterator 中的 value 属性 在 var 属性中定义对象名称

    <s:iterator value="labsList" status="mbrindex" var="lab">
    <s:property value="%{#lab.id}" />
    

    【讨论】:

    • 嗨..谢谢您的回复.. 但是,这个仍然没有解决我的问题。假设 - 我的一个实验室对象有一个名为 labname 的属性,其值为“BP”,另一个实验室对象的实验室名称为“A1c”。现在,如果我想访问labname为“BP”的lab对象的labvalue属性,我该如何实现呢?
    • 执行 并在 if 条件下执行其余逻辑。
    • 这样,如果我有 20 个实验室对象并且只需要其中的 2 个,我需要在列表中迭代 2 次以上。我不想这样做,想知道是否有办法直接访问特定对象的列表。
    • 我认为没有直接的方法可以使用迭代器标签从列表中访问某些内容。所以,我发现的替代方法是将列表元素推送到一个 HashMap,对象名称为 HashMap 键,从 标签我可以直接访问所需对象的属性。
    【解决方案2】:

    如果您不想使用地图,那就更简单了,那么您可以利用OGNL's List Selection 功能:

    从集合中选择

    OGNL 提供了一种简单的方法来使用表达式来选择一些 集合中的元素并将结果保存在新集合中。 我们称之为“选择”,来自用于选择子集的数据库术语 表中的行数。例如,这个表达式:

    listeners.{? #this instanceof ActionListener}
    

    返回所有监听器的列表,这些监听器是 ActionListener 类。

    [...]

    那么在您描述的情况下,如果您只想过滤列表中 labname 属性等于“BP”的元素,它将是:

    <span>
        labvalue attribute for the (first, if any) laboratory with labname="BP" is : 
        <s:property value="labsList.{^ #this.labname == 'BP' }[0].labvalue" />
    </span>
    

    根本不需要迭代器。

    您还可以迭代 projected / selected 列表,顺便说一句;)

    <span>
        All labvalue attributes for all the laboratories with labname="BP" are : 
        <s:iterator value="labsList.{? #this.labname == 'BP' }" >
            <s:property value="labvalue" />
        </s:iterator>
    </span>
    

    享受

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-01
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      相关资源
      最近更新 更多