2013-02-04 38 views
4

我使用Apache Struts 1.3來呈現網格,這是一個嵌入在.jsp中的html表單。像我如何使用Struts管理多維數組表格

<html:form action="/MyController.do?action=processForm"> 
<html:text property="taxation[0][0]" value="" styleClass="gridInputs"></html:text> 
<html:text property="taxation[0][1]" value="" styleClass="gridInputs"></html:text> 
... 
<html:text property="taxation[10][10]" value="" styleClass="gridInputs"></html:text> 

東西myController的關聯到一個ActionForm:

public class MyForm extends ActionForm{ 

protected String taxation[][]= new String [10][10]; 

public String[] getTaxation() { 
    return taxation; 
} 

public void setTaxation(String[][] taxation) { 
    this.taxation = taxation; 
} 

出現的問題,當我嘗試檢索提交表單的信息。 Whithin MyController.class我有一個簡單的動作調度

public class MyController extends DispatchAction { 
public ActionForward processForm(ActionMapping mapping, ActionForm form, 
     HttpServletRequest request, HttpServletResponse response) { 

    MyForm myform = (MyForm) form; 

      // Here i can use the getter method to retrieve an array, but 
      // myform is already wrong populated from struts 


    } 


    return mapping.findForward("stage2"); 

} 

我知道我可以使用一個向量(一維數組),它工作得很好,但遺憾的是我需要遵循一些規範(和規範逼我使用具有10x10矩陣的類MyForm ...)。如何使用struts填充二維數組的正確方法?

謝謝你的幫助!

+1

該數組,對象或字符串或數字中的值是什麼? – Naved

+0

我嘗試在調試模式下使用3x3陣列。提交9個輸入我在Mycontroller中得到一個3x1數組,這些值都是字符串,但不是連續的。我的意思是: 我用輸入值填充:1 2 3 4 5 6 7 8 9 我從ActionForm對象中檢索值:1(postion [0] [0])4(postion [1] [ 0])和7(位置[2] [0]) – pabl0x

回答

4

Struts不支持在Form bean中填充多維數組。但是,它處理對象的一維數組。所以作爲一個解決方法,如果你可以創建一個類(比如MatrixRow),它本身包含一個Uni維數組,然後你可以在表單bean中創建一個Uni維數組。您的新類將看起來像

public class MatrixRow { 

    private String matrixCol[] = new String[10]; 

    /** 
    * @return the matrixCol 
    */ 
    public String[] getMatrixCol() { 
     return matrixCol; 
    } 

    /** 
    * @param matrixCol the matrixCol to set 
    */ 
    public void setMatrixCol(String[] matrixCol) { 
     this.matrixCol = matrixCol; 
    } 
} 

然後在你的form bean

private MatrixRow[] arrMatrix = new MatrixRow[10]; 
/** 
    * @return the arrMatrix 
    */ 
    public MatrixRow[] getArrMatrix() { 
     return arrMatrix; 
    } 

    /** 
    * @param arrMatrix the arrMatrix to set 
    */ 
    public void setArrMatrix(MatrixRow[] arrMatrix) { 
     this.arrMatrix = arrMatrix; 
    } 

,並在你的JSP,當你提交該表格,你可以使用它像

<html:form action="biArrayTestAction.do"> 
    <table cellpadding="0" cellspacing="0" width="100%"> 
    <logic:iterate id="matrixRows" name="biArrayTestForm" 
        property="arrMatrix" indexId="sno" 
        type="logic.MatrixRow" > 
    <tr> 
     <td><bean:write name="sno"/></td> 
    <logic:iterate id="matrixCol" name="matrixRows" property="matrixCol" indexId = "colNo"> 
     <td> 
      <input type="text" name="arrMatrix[<%=sno %>].matrixCol[<%=colNo %>]"> 
     </td> 
    </logic:iterate> 
    </tr> 
    </logic:iterate> 
    <tr> 
     <td align="center" valign="top" colspan="2"> 
     &nbsp; 
     </td> 
    </tr> 
    <tr> 
     <td align="center" valign="top" colspan="2"> 
      <html:submit property="command" value="Test"></html:submit> 
     </td> 
    </tr> 
    </table> 

你將獲取填充值的MatrixRow對象的所有列。

我希望這會幫助你。我在Struts1中找不到使用多維數組的其他方式。