Oreilly多部分解析器和动态创建行(通过jquery)

Oreilly Multipart parser and dynamically created rows (through jquery)

本文关键字:通过 jquery 创建 动态 分解 多部 Oreilly      更新时间:2023-09-26

我有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代码:

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我有一个脚本代码(代码是相当旧的,所以它有脚本)。它使用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创建的行。

请帮助。

我会确保每个输入有一个唯一的name="…"属性通过附加行号和列号的名称(例如myInput_2_3将是第2行,第3列的输入)。你可以使用setAttribute('name',…)在你的newcell设置输入的名称。

我终于熬过去了。这个问题与多部分解析器无关。产生问题的是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>

它工作了:)