我有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创建的行。
请帮忙。提前谢谢。
答案 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>
它有效:)