Struts2 с динамическим столбцом и строками Nested Iterator - PullRequest
1 голос
/ 05 января 2012

Я хочу отобразить сетку в Struts2, которая включает в себя динамические строки и столбцы, а также обеспечивает сохранение данных в базе данных. поэтому я создал один список для столбцов и другую карту для этих значений в одном компоненте.

Я также включил код.

Мой боб выглядит как

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 голосов
/ 05 января 2012

Код будет примерно таким

<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>

Вот полный пример Вложенного Итератора в Struts2

0 голосов
/ 05 января 2012

Извините, у меня недостаточно представителей для отправки комментария, и я не уверен, полностью ли я понимаю вашу проблему. Однако есть одна вещь, которую я отметил с индексом строки.

не должно это

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

точнее будет

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

Обратите внимание на одинарные кавычки. Это должно правильно установить строковый ключ на карте.

...