【问题标题】:displaytag dynamic columns from database来自数据库的 displaytag 动态列
【发布时间】:2014-04-23 02:16:05
【问题描述】:

我想在 struts2 Web 应用程序中使用显示标签来显示来自数据库的数据。数据显示动态更改表名并显示数据。如何在jsp中显示动态列。 我使用了以下代码。它只工作一排。如何在显示表中添加多行?

  public class TableDataDyno {

private ArrayList<Object> dynaBeans;
public TableDataDyno()
{
    dynaBeans = new ArrayList<Object>();

    dynaBeans.add(new DynaBean("One","5"));
    dynaBeans.add(new DynaBean("One","6"));
    dynaBeans.add(new DynaBean("One","7"));
    dynaBeans.add(new DynaBean("One","8"));
    dynaBeans.add(new DynaBean("One","9"));

    dynaBeans.add (new DynaBean("Two", "5"));
    dynaBeans.add (new DynaBean("Two", "6"));
    dynaBeans.add (new DynaBean("Two", "7"));
    dynaBeans.add (new DynaBean("Two", "8"));
    dynaBeans.add (new DynaBean("Two", "9"));


    dynaBeans.add(new DynaBean("Three", "5"));
    dynaBeans.add(new DynaBean("Three", "6"));
    dynaBeans.add(new DynaBean("Three", "7"));
    dynaBeans.add(new DynaBean("Three", "8"));
    dynaBeans.add(new DynaBean("Three", "9"));

}
public ArrayList<Object> getdynaBeans() {
    return dynaBeans;
}

    public class DynaBean {
private String title;
  private String value;
      public DynaBean(String title, String value) {
        this.title = title;
        this.value = value;
    }
        public String getTitle() {
        return title;
    }
    public String getValue() {
        return value;
    }

}

         java.util.ArrayList outerBeans = new java.util.ArrayList();
               for(int i=0; i< 2 ; i++)
               {
                 outerBeans.add(new TableDataDyno());
               }
                System.out.println(outerBeans);
   request.setAttribute("items", outerBeans);



        <display:table uid="item" name="items">
   <c:forEach var="cl" items="${item.dynaBeans }" varStatus="index">
       <display:column title="${cl.title}" property="dynaBeans[${index.index}].value"  />
   </c:forEach>

输出为:

预期输出:

【问题讨论】:

  • 你的预期输出是什么?
  • 我的预期输出是:一二三

标签: spring struts2 displaytag


【解决方案1】:

稍作改动

TableDataDyno.java

public class TableDataDyno {
private ArrayList<DynaBean> dynaBeans;

public TableDataDyno(int number)
{
        dynaBeans = new ArrayList<DynaBean>();
        dynaBeans.add(new DynaBean("One",number));
        dynaBeans.add (new DynaBean("Two", number));
        dynaBeans.add(new DynaBean("Three", number));
}
public ArrayList<DynaBean> getdynaBeans() {
    return dynaBeans;
}
}

jsp文件中

java.util.ArrayList<TableDataDyno> outerBeans = new java.util.ArrayList<TableDataDyno>();
for(int i=5; i< 10 ; i++)
{
    outerBeans.add(new TableDataDyno(i));
}

request.setAttribute("items", outerBeans);

<display:table uid="item" name="items">
  <c:forEach var="cl" items="${item.dynaBeans }" varStatus="index">
      <display:column title="${cl.title}" property="dynaBeans[${index.index}].value"  />
  </c:forEach>
</display:table>

提供输出

一二三

5 5 5

6 6 6

7 7 7

8 8 8

9 9 9

但是对于不同的值我们仍然需要解决方案

如果我将 DynaBean.java 设为

 public class DynaBean {
private String title;
  private List<String> value;
      public DynaBean(String title, List<String> value) {
        this.title = title;
        this.value = value;
    }
        public String getTitle() {
        return title;
    }
    public List<String> getValue() {
        return value;
    }
 }

TableDataDyno.java一样

 public class TableDataDyno {
private ArrayList<DynaBean> dynaBeans;

  public TableDataDyno()
{
        dynaBeans = new ArrayList<DynaBean>();
        List<String> arr1 = new ArrayList<String>();
        arr1.add("5");
        arr1.add("6");
        arr1.add("7");
        arr1.add("10");
        
        dynaBeans.add(new DynaBean("One",arr1));
        List<String> arr2 = new ArrayList<String>();
        arr2.add("5");
        arr2.add("6");
        arr2.add("7");
        arr2.add("11");

        dynaBeans.add (new DynaBean("Two", arr2));
        
        List<String> arr3 = new ArrayList<String>();
        arr3.add("5");
        arr3.add("6");
        arr3.add("7");
        arr3.add("13");

        dynaBeans.add(new DynaBean("Three", arr3));

}
public ArrayList<DynaBean> getdynaBeans() {
    return dynaBeans;
}
 }

那么输出就是

One          Two     Three 

[5, 6, 7, 10] [5, 6, 7, 11] [5, 6, 7, 13]

[5, 6, 7, 10] [5, 6, 7, 11] [5, 6, 7, 13]

仍然没有得到预期的输出

现在jsp页面有一个小技巧

 <display:table uid="item" name="items">
    <c:forEach var="cl" items="${item.dynaBeans }" varStatus="index">
        <display:column title="${cl.title}"    >
            <display:table uid="b" name="${cl.value}">
                    <c:out value="${b}"></c:out>
            </display:table>
        </display:column>
   </c:forEach>
  </display:table>   

输出是你的预期输出

一二三

5 5 5

6 6 6

7 7 7

10 11 13

终于搞定了!!!! :)

【讨论】:

    猜你喜欢
    • 2018-04-18
    • 2010-11-22
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多