【问题标题】:Struts 2 List of List accessStruts 2 List 访问列表
【发布时间】:2012-04-28 16:43:57
【问题描述】:

我想知道是否有人可以提供帮助。

背景架构:

我有一个应用程序,其中包含许多具有许多特定问题的领域,这些问题不断发展

因此,在高级视图中可以有许多应用程序。一个用户可能与许多应用程序相关联。

所以我有一个应用程序列表,我可以很容易地遍历并获取其相关详细信息。但是,当涉及到访问每个特定区域以获取问题进度时,出于某种原因,它并不适合我。

所以这是我想要的逻辑:

用于应用程序

显示其详细信息

对于每个区域(applicaitonId)

显示每个完成进度

所以翻译成struts我有这个

<s:iterator id="app" value="appList" status="row">
<s:iterator id="qsp" value="questionProgessList[%{#row.index}]" status="status">

所以applist 是所有应用程序的列表,它有自己的getter/setter && questionSetProgress 定义为:

List<ApplicationQuestionSetProgress> getQuestionProgressList(final int index)

或 List> getQuestionProgressList()

所以尝试以多种方式访问​​列表已被证明是徒劳的:

<s:iterator id="qsp" value="questionProgessList">
    <s:property />
</s:iterator>

用这个:

List<List<ApplicationQuestionSetProgress>> getQuestionProgressList()

但没有快乐

我也尝试过使用迭代器索引来调用该方法,但它不起作用。

List<ApplicationQuestionSetProgress> getQuestionProgressList(final int index)

&lt;s:iterator id="qsp" value="questionProgessList[%{#row.index}]" status="status"&gt; or &lt;s:iterator id="qsp" value="questionProgessList(%{#row.index})" status="status"&gt;

任何提示或提示??

TIA

【问题讨论】:

  • 您使用的哪个版本的 id 属性在 Struts 2.1.x 中已被弃用,并已被 var 属性取代。
  • 提示,除非另有证明,否则假设您不需要迭代器中的 var (不推荐使用 id )或 status 属性。此外,如果集合只包含另一个集合 List> 则内部迭代器甚至不需要名称属性(只需一个空标记即可)。 status 和 var 有各种用途,但一般来说,如果你想在 html 中写入记录号或数组索引,那么你将需要 status(虽然 struts2 通常不需要索引)并且如果你需要编写外部迭代器的属性进入嵌套的迭代器然后 var 是个好主意。

标签: struts2 struts struts-html


【解决方案1】:

考虑到你有类似的东西

List<ApplicationQuestionSetProgress> getQuestionProgressList(final int index)

使用这个

<s:iterator var="qsp" value="questionProgessList[#row.index]" status="status"> 

【讨论】:

    【解决方案2】:

    您提到了以下方法:

    List<List<ApplicationQuestionSetProgress>> getQuestionProgressList()
    

    但您提到该操作需要获取“应用程序”列表,其中每个应用程序的属性中都包含一个“区域”列表。

    因此,我将命名该方法:

    List Applications getApplications(){
      return this.applications;
    }
    

    提取所有属性的 JSP 形式为:

    <s:iterator value="applications">
       <s:property value=applicationsProperty1"/>
       <s:property value="applicationsProperty2"/>
       ...
       <s:iterator value="areas">
          <s:property value="areasProperty1"/>
          <s:property value="areasProperty2"/>
          ...
          <s:iterator value="progress">
             <s:property value="progressProperty1"/>
             <s:property value="progressProperty2"/>
             ...
          </s:iterator>
       </s:iterator>
    </s:iterator>
    

    【讨论】:

    • 感谢所有帮助我有一些东西要尝试。我目前正在使用struts 2.0.6,不要问为什么只是项目的要求。尽管如此,我确实有getApplications,然后我进行了单独的数据库调用以生成applicationQuestionSetProgress 的列表,因为每个应用程序都有6 个不同的areas,每个问题大约有20 个问题,我需要跟踪这些问题的进度。所以正如我所说的一个人可能有很多应用程序,
    • 但进度未附加到应用程序。因此 List> 所以外部列表表示潜在的应用程序数量,因此index 0 将映射到应用程序 1,索引 1 将映射到应用程序 2,依此类推,内部列表包含所有应用程序的集合地区进展。
    • 但听起来每个区域都有一个“进步”,如果这样嵌套会更深层次......答案相应调整。
    • 为了进一步帮助,最好添加代码。如果您可以为应用程序、区域和进度创建非常有用的最小表示(getter 和 setter 来显示它们之间的关系)以及关于您要显示的操作和声明,我们可以提供具体建议。跨度>
    猜你喜欢
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    相关资源
    最近更新 更多