项目用的是ssh框架,这是一个表报统计模块
问题分两部分:
【1】.父页面提交查询条件(月份),然后传递给action查询相关数据,然后打开一个新的页面(需求要求必须要新打开一个页面),新打开的页面接收action中传递回来的值并展示出来,请问怎么实现?我是这样做的,在父页面里面把查询条件传递给要展示数据的子页面,然后子页面加载的时候把查询条件传递给action,子页面用window.open打开,sturts2的配置文件里的页面跳转就是跳转到这个子页面来的,可是这样有个问题,在FireBug下的html中能看得数据,但是在window.open打开的页面中却没有数据;
PS:对话框考虑过,不过那个不符合需求。
【2】.数据的展示如图,图片里的项目名称,事由1到7,以及子项目名称和数据都是动态生成的,这样的表格如何动态生成?主要的问题是迭代的时候项目名称只需要迭代一次,而其他的需要迭代很多次,这样的表格怎么生成?跪求高手赐教,非常感谢

解决方案 »

  1.   


    1、jsp将查询条件以表单形式提交到action,这个不能实现吗?
    只要有办法把查询条件拿到action中,害怕下一个子画面无法拿到吗?2、动态报表,一般要考虑使用子报表+交叉报表实现。至于什么是交叉报表,如何使用,这个你去百度搜索一下例子,很多。你要举一反三,因为交叉报表的例子很简单的,肯定跟你的需求不符合。
      

  2.   

    现在的问题是我在FireBug中的HTML页面能看到数据显示在页面上,但是在window.open打开的那个实际的页面上看不到;交叉报表我会去看下的,非常感谢
      

  3.   

    1:  我觉得 这个 应该 异步去获取数据 而不走STRUTS2的流程
    2:  这个顺便说一下 你这个需求 设计 不如 直接查询后 弹出个EXCEL展示
      

  4.   


    你在action中如何存值的。你应该明白request的范围吧,你在action中用redirect方式跳转,则request范围是无法拿到的值
      

  5.   

    在action中值是存在集合里,不过这些数据是从4个表里查出来的,项目表,子项目表,还有事由表,以及事由对应的数据表,形成的关系就是集合{项目{子项目{事由对应的数据}}{事由}},这样的集合机构处理起来很是麻烦,之前试过用json格式,不过json只会和jqGrid搭配使用,所以就苦逼了。。
      

  6.   

    redirect方式的话得用session了。
    正常的话,forward方式下,request在window.open下的页面应该好用。然后子页面加载的时候把查询条件传递给action,子页面用window.open打开??
    LZ 上面这句话的代码能否帖下?
      

  7.   

    lz这要说那是提交月份后的数据没有返回到前台页面上来吗、?这要你要看看你跳转的方式是那种?2个问题那个格式是excel还是页面形式的?如果是excel的那在后台代码迭代的时候就要控制合并表格了;若是以页面形式展示的话,在页面迭代的时候会有个cont属性记录迭代次数的,如何把那一<td>标签跨cont行就行了
      

  8.   

    具体的就是
    window.open("jsp/patrol/patrolCountsMain.jsp?patrolCountMonth="
    + time,
    {},
    "patrolCountsMain.jsp","height=600, width=1000, top=200, left=200, toolbar=no,menubar=no, scrollbars=no, location=yse"); },
    功能就是点击查询的时候弹出一个月份选择的对话框,选择月份后对话框关闭然后弹出打开那个新的子页面,然后再新打开那个子页面上显示查询出来的数据
      

  9.   


    不好意思,忘了说那个表格是页面形式的,cont属性也用了,不过那个数据集合有点复杂,是个三层的,第一层是项目名称,第二层是子项目名称,第三层是子项目对应的事由的相关数据,所以处理起来就很困难
      

  10.   

    1. 我觉得很简单,你用window.open打开的不就是父子页面吗?去古哥一下我记得有window.parent可以获取到父页面的方法,参数,并且可以调用父页面的方法执行,父页面也可以控制子页面的方法执行,这个古哥一下就可以找到了。
    2. 动态生成表格的问题,其实也挺简单的,你说的项目名称只要生成一次。代码你改改,动态生成应该没啥问题的,以前我做动态生成考核表比你这个更复杂都可以做出来。<html>
    <head>
    <script>
    function generatorTable(rows){
    /*var ss=[{"项目名称","子项目1","数据","数据","数据","数据","数据","数据","数据"},
    {"项目名称","子项目1","数据","数据","数据","数据","数据","数据","数据"},
    {"项目名称","子项目1","数据","数据","数据","数据","数据","数据","数据"},
    {"项目名称","子项目1","数据","数据","数据","数据","数据","数据","数据"},
    {"项目名称","子项目1","数据","数据","数据","数据","数据","数据","数据"},
    {"项目名称","子项目1","数据","数据","数据","数据","数据","数据","数据"},
    {"项目名称","子项目1","数据","数据","数据","数据","数据","数据","数据"},
    {"项目名称","子项目1","数据","数据","数据","数据","数据","数据","数据"}];*/
    var ss=["项目名称","子项目1","数据","数据","数据","数据","数据","数据","数据"];
    var tabs='<table id="tb1" border="1">';
    var trs='';
    for(var i=0;i<rows;i++){

    var tr='';
    tr+='<tr>';
    for(var j=0;j<ss.length;j++){
    if(i==0 && j==0){
    tr+='<td rowspan="'+rows+'">'+ss[j]+'</td>'
    }else{
    if(j!=0)
    tr+='<td>'+ss[j]+'</td>';
    }
    }
    alert(tr);
    trs+=tr;
    }
    tabs+=getHead();
    tabs+=trs;
    tabs+='</table>';
    alert(tabs);
    var div1=document.getElementById('div1');
    if(div1){
    div1.innerHTML=tabs;
    }
    }function getHead(){
    //这里可以动态生成看你要生成的效果
    var str='';
    str+='<tr>';
    str+=' <th rowspan="2">项目</th>';
    str+=' <th rowspan="2">子项目</th>';
    str+=' <th colspan="7">事由</th>';
    str+='</tr>';
    str+='<tr>';
    str+=' <th>事由1</th>';
    str+=' <th>事由2</th>';
    str+=' <th>事由3</th>';
    str+=' <th>事由4</th>';
    str+=' <th>事由5</th>';
    str+=' <th>事由6</th>';
    str+=' <th>事由7</th>';
    str+='</tr>';
    return str;
    }
    </script>
    </head>
    <body>
    <div id="div1">
    </div>
    <input type="button" value="click" onclick="generatorTable(10);" />
    </body>
    </html>