Oreilly Multipart解析器和动态创建的行(通过jquery)

时间:2014-07-18 08:48:22

标签: java javascript html jsp multipartform-data

我有2个jsp' createEdit.jsp和save.jsp

在createEdit.jsp中我在表单中有一个html代码,因为它包含文件上传,我使用的是编码类型" multipart / form-data"。在表格里面我有一张桌子。要求是将数据从表保存到数据库。我可以通过Jquery或Javascript动态地向表添加行。

这是我的样本表格:

<form  action="save.jsp" method="post" enctype="multipart/form-data" name="frm">
<table id="tblRating">
<tr><td><input id="e1">Element1</input><input id="e2"></input><td><tr>
</table>
</form>

javascript代码用于动态添加行到exisitng表:

function generateRow(){
        console.log("Generate the row");
        var table = document.getElementById('tblRating');

        var rowCount = table.rows.length;
        var row = table.insertRow(rowCount);

        var colCount = table.rows[0].cells.length;
        for(var i=0; i<colCount; i++) {

            var newcell = row.insertCell(i);

            newcell.innerHTML = table.rows[1].cells[i].innerHTML;
            console.log(newcell.childNodes);
            switch(newcell.childNodes[0].type) {
                case "text":
                        newcell.childNodes[0].value = "";
                        break;
                case "checkbox":
                        newcell.childNodes[0].checked = false;
                        break;
                case "select":
                        newcell.childNodes[0].selectedIndex = 'null';
                        break;
            }
        }
        return false;
    }

在save.jsp里面我有一个scriplet代码(代码很旧,所以它有scriplet)。 它使用Oreilly Multipart解析器解析请求并逐个获取输入元素。

我的save.jsp示例代码:

MultipartParser parser = new MultipartParser(request, 2 * 1024 * 1024);
String e1Value = ((ParamPart) parser.readNextPart()).getStringValue()); //reads the input elements only
String e2Value = ((ParamPart) parser.readNextPart()).getStringValue());

问题是当我尝试通过解析器读取元素时,它能够获取表单上的现有行。但解析器不会占用通过javascript创建的行。 我已尝试在提交时打印表单。它具有动态创建的行。但是当我试图从解析器获取数据时,它不会提供通过javascript创建的行。

请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:0)

我通过将行号和列号附加到名称来确保每个输入都具有唯一的name =“...”属性(例如,myInput_2_3将是第2行第3列中的输入)。您可以在newcell上使用setAttribute('name',...)来设置输入的名称。

答案 1 :(得分:0)

最后,我能够度过难关。 该问题与multipart解析器无关。 JSP的结构正在解决一个问题。由于现有结构,jsp表单无法占用动态创建的元素。

早期的jsp结构是这样的:

<table align=center border=0 cellpadding=0 cellspacing=0 width=75%>
<form  onSubmit="return validate()" action=".." method="post" enctype="multipart/form-data" name="frmEntry">
<tr><td>........</td></tr>
</form>
</table>

上述结构造成了问题。所以我只是将表格放在表格内。

<form  onSubmit="return validate()" action=".." method="post" enctype="multipart/form-data" name="frmEntry">
<table align=center border=0 cellpadding=0 cellspacing=0 width=75%>
<tr><td>........</td></tr>
</table>
</form>

它有效:)