5

Apache Struts 1.3を使用してグリッドをレンダリングしていますが、whichは.jspに埋め込まれたhtmlフォームです。何かのようなもの

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

フォームから送信された情報を取得しようとすると、問題が発生します。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を使用する必要があります...)。支柱を使用して2次元配列にデータを入力する正しい方法はどのようになりますか?

お手伝いありがとう!

4

1 に答える 1

6

Struts は、フォーム Bean での多次元配列の入力をサポートしていません。ただし、オブジェクトの 1 次元配列は処理します。回避策として、それ自体が 1 次元配列を含むクラス (MatrixRow など) を作成し、フォーム Bean でそのオブジェクトの 1 次元配列を作成できます。新しいクラスは次のようになります

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

次に、フォーム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 で多次元配列を使用する方法は他にありません。

于 2013-02-07T09:23:42.553 に答える