想将jsp页面的一个table 里的tr td内容提交。用js取到了内容,并构建了一个二维数组,现在放到一个隐藏域里,在form里用一个二维数组接受,现在出现一个问题,form里的二维数组只有第一行有数,并且是js数组的全部内容。请问怎么才能将js二维数组完整提交到form二维数组呢?jsp内容如下:
<%@ page language="java" pageEncoding="GBK"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
<html:base />
<title>test.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script language="javascript">
function exp(tb){var doc=document.getElementById("tb");
var rows=doc.rows.length;var maxcol=0;
var rowarray=new Array();
for(r=0;r<rows;r++){
if(maxcol<doc.rows[r].cells.length){
maxcol=doc.rows[r].cells.length;
}
rowarray[r]=new Array();
for(c=0;c<doc.rows[r].cells.length;c++){
rowarray[r][c]=doc.rows[r].cells[c].innerText;
}
//document.writeln();
}
with(document.forms[0]){
 title.value=rowarray;
 flag.value="exp"; 
 row.value=rows;
 col.value=maxcol;
 }
}/////////////////////////
function gettitle(tb){
var doc=document.getElementById("tb");
var excel = new ActiveXObject("Excel.Application"); var book=excel.Workbooks.Add();
var sheet=book.ActiveSheet; 
var rows=doc.rows.length;
for(r=0;r<rows;r++){
var colspan=1;//单元格所占单元格数
var current=1;//td当前打印位置
var maxcolumn=doc.rows[r].cells.length;//当前行列数
 for(c=0;c<maxcolumn;c++){  
 sheet.Cells(r+1,current)=doc.rows[r].cells[c].innerText; //将表格内容赋值给excel单元格
 colspan=doc.rows[r].cells[c].colSpan; //取的当前单元格所占单元格数
 current=current+colspan;//将当前位置往后移动colspan数量
 sheet.Range(sheet.Cells(r+1,current-colspan),sheet.Cells(r+1,current-1)).mergecells=true;
 //将刚写入的单元格进行合并。
 }
 }
 excel.Visible=true;
}//gettitle
</script>
</head>
<body>
<html:form action="/expexcel.do">
<html:hidden property="flag" name="expexcelForm" styleId="flag" />
<html:hidden property="title" name="expexcelForm" styleId="title" />
<html:hidden property="row" name="expexcelForm" styleId="row" />
<html:hidden property="col" name="expexcelForm" styleId="col" />
<table border="1" id="tb">
<tr>
<td colspan="2">
r1c1
</td>
<td colspan="3">
r1c2
</td>
<td colspan="2">
r1c3
</td>
</tr>
<tr>
<td>
r2c1
</td>
<td>
r2c2
</td>
<td>
r2c3
</td>
<td>
r2c4
</td>
<td>
r2c5
</td>
<td>
r2c6
</td>
<td>
r2c7
</td>
</tr>
<tr>
<td>
data1
</td>
<td>
data2
</td>
<td>
data3
</td>
<td>
data4
</td>
<td>
data5
</td>
</tr>
</table>
<html:button property="submit" value="导出" onclick="gettitle(id)"></html:button>
<html:submit onclick="exp(id)" value="提交导出"></html:submit>
</html:form>
</body>
</html:html>

解决方案 »

  1.   

    考虑使用一下java代码,创建一个array来存放
      

  2.   

    参数只能带字符串的。
    你可能要将你的二维数组组成一个字符串提交(加一个明显的分隔符),再在java中解析这个字符串。
      

  3.   

    谢谢楼上两位,我不想用长串,到java中解析。或者这个问题除了js构建数组外还有什么其他方法,提交表格td内容吗?
      

  4.   

    提交到action中的反正只能是字符串,办法要看具体情况。
    像你那种情况,你可以考虑表格的数据来源。
      

  5.   

    你的表格本身是用一组数据来填充的,你只要将这组数据带到action中去就可以了,可以考虑session。
      

  6.   

    建议用JAVA代码,好像没有特别好的方法
      

  7.   

    想上述哪么写,可以在在form里用String [][] 来得到, 但是得到的结果是:
    一行一列的数组[["r1c1","r1c2","r2c1"......]]..郁闷啊。。~~~~~~
      

  8.   

    一般来说,填充表格的数据来自于数据库的查询,保存在一个list中,将这个list保存到request或session中能带到action中就行了。如果表格数据是一个一个手写的话,那就只能用字符串了。