Struts2具有嵌套的Iterator动态列和行

时间:2012-01-05 09:16:22

标签: struts2 iterator

我想在Struts2中显示包含动态行和列的网格,它还提供数据应保存在数据库中。 所以我在一个bean中为列和其他地图创建了一个列表。

我也包含了代码。

我的bean看起来像

public class Annexure{
    private List<String> columnsList = new ArrayList<String>(1);
   private Map<String,List<String>> columnsValues = new HashMap<String,List<String>>(1);
   ... setter/getter methods
}

动作类

package com.eks.ias.web.annexure.action;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.eks.ias.web.annexure.vo.Annexure;
import com.opensymphony.xwork2.ActionSupport;
public class AnnexureAction extends ActionSupport {

private static final long serialVersionUID = -8819437646232339486L;

private Annexure annexure = new Annexure();

public String execute()throws Exception {

    List<String> columnsList = new ArrayList<String>();
    columnsList.add("STNNo");
    columnsList.add("EAN");
    columnsList.add("ArticleCode");
    annexure.setColumnsList(columnsList);

    annexure.setTotalColumns(3);
    annexure.setName("Stock Pending for Inward in SAP");
    annexure.setDescription("Details of all merchandise physically received");
    annexure.setSiteName("XXX");

    Map<String,List<String>> columnsValues = new HashMap<String,List<String>>();
    columnsValues.put("0", columnsList);
    columnsValues.put("1", columnsList);
    annexure.setColumnsValues(columnsValues);
    return SUCCESS;
    }

public void setAnnexure(Annexure annexure) {
    this.annexure = annexure;
}
public Annexure getAnnexure() {
    return annexure;
}
    }

JSP页面

<s:iterator value="annexure.columnsValues" status="rows">
    <tr>
    <s:iterator value="annexure.columnsList" status="columns">
    <td><s:textfield name="annexure.columnsValues[%{#rows.index}][%{#columns.index}]" theme="simple"/></td>
    </s:iterator>
    </tr>
 </s:iterator>

生成的Html代码看起来像

<tr>
     <td>
    <input type="text" name="annexure.columnsValues[0][0]" value="STNNo" 
         id="annexure_annexure_columnsValues_0__0_"/>
       </td>
       <td>
      <input type="text" name="annexure.columnsValues[0][1]" value="EAN" 
          id="annexure_annexure_columnsValues_0__1_"/>
    </td>
    <td>
       <input type="text" name="annexure.columnsValues[0][2]" value="ArticleCode"  
            id="annexure_annexure_columnsValues_0__2_"/>
      </td>
    </tr>

当我提交数据时,我无法获得这些数据 如果数据填充,我无法理解问题,那么数据也应该开始运作。

2 个答案:

答案 0 :(得分:0)

抱歉,我没有足够的代表发表评论,我不确定我是否完全理解你的问题。但是,我在行索引中注意到了一件事。

不应该这个

<s:textfield name="annexure.columnsValues[%{#rows.index}][%{#columns.index}]" theme="simple"/>

而不是

<s:textfield name="annexure.columnsValues['%{#rows.index}'][%{#columns.index}]" theme="simple"/>

请注意单引号。这应该在地图中正确设置字符串键。

答案 1 :(得分:0)

代码将是这样的

<s:iterator value="lstBean" id="lstBean" status="outerStat">
        <s:textfield value="%{name}" name="lstBean[%{#outerStat.index}].name"/>
        <s:textfield value="%{amt}" name="lstBean[%{#outerStat.index}].amt"/>
        <s:textfield value="%{id}" name="lstBean[%{#outerStat.index}].id"/>
        <s:iterator value="%{lstString}" status="myStat">
            <s:textfield name="lstBean[%{#outerStat.index}].lstString[%{#myStat.index}]"/>
        </s:iterator>
    </s:iterator>

以下是Nested Iterator in Struts2

上的完整示例