【急急急】一个弹出新页面获取action中传递过来的值的问题,在线等

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

跪求高手赐教,非常感谢

12 个解决方案

#1


引用楼主  的回复:
项目用的是ssh框架,这是一个表报统计模块
问题分两部分:
【1】.父页面提交查询条件(月份),然后传递给action查询相关数据,然后打开一个新的页面(需求要求必须要新打开一个页面),新打开的页面接收action中传递回来的值并展示出来,请问怎么实现?我是这样做的,在父页面里面把查询条件传递给要展示数据的子页面,然后子页面加载的时候把查询条件传递给action,子页面用window.open……


1、jsp将查询条件以表单形式提交到action,这个不能实现吗?
只要有办法把查询条件拿到action中,害怕下一个子画面无法拿到吗?

2、动态报表,一般要考虑使用子报表+交叉报表实现。至于什么是交叉报表,如何使用,这个你去百度搜索一下例子,很多。你要举一反三,因为交叉报表的例子很简单的,肯定跟你的需求不符合。

#2


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

#3


1:  我觉得 这个 应该 异步去获取数据 而不走STRUTS2的流程
2:  这个。。。

顺便说一下 你这个需求 设计 不如 直接查询后 弹出个EXCEL展示

#4


设计很重要 你可以引导客户 让他知道这么做更好

#5


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


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

#6


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

#7


redirect方式的话得用session了。
正常的话,forward方式下,request在window.open下的页面应该好用。

然后子页面加载的时候把查询条件传递给action,子页面用window.open打开??
LZ 上面这句话的代码能否帖下?

#8


lz这要说那是提交月份后的数据没有返回到前台页面上来吗、?这要你要看看你跳转的方式是那种?

2个问题那个格式是excel还是页面形式的?如果是excel的那在后台代码迭代的时候就要控制合并表格了;若是以页面形式展示的话,在页面迭代的时候会有个cont属性记录迭代次数的,如何把那一<td>标签跨cont行就行了

#9


具体的就是
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");

},
功能就是点击查询的时候弹出一个月份选择的对话框,选择月份后对话框关闭然后弹出打开那个新的子页面,然后再新打开那个子页面上显示查询出来的数据

#10


引用 8 楼  的回复:
lz这要说那是提交月份后的数据没有返回到前台页面上来吗、?这要你要看看你跳转的方式是那种?

2个问题那个格式是excel还是页面形式的?如果是excel的那在后台代码迭代的时候就要控制合并表格了;若是以页面形式展示的话,在页面迭代的时候会有个cont属性记录迭代次数的,如何把那一<td>标签跨cont行就行了


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

#11


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>

#12


引用 11 楼  的回复:
1. 我觉得很简单,你用window.open打开的不就是父子页面吗?去古哥一下我记得有window.parent可以获取到父页面的方法,参数,并且可以调用父页面的方法执行,父页面也可以控制子页面的方法执行,这个古哥一下就可以找到了。
2. 动态生成表格的问题,其实也挺简单的,你说的项目名称只要生成一次。代码你改改,动态生成应该没啥问题的,以前我做动态生成考核表比你这个更复杂都可以做出来。

……


嗯,非常感谢,这种方法可以实现,我去试试看,非常感谢大家,结贴吧

#1


引用楼主  的回复:
项目用的是ssh框架,这是一个表报统计模块
问题分两部分:
【1】.父页面提交查询条件(月份),然后传递给action查询相关数据,然后打开一个新的页面(需求要求必须要新打开一个页面),新打开的页面接收action中传递回来的值并展示出来,请问怎么实现?我是这样做的,在父页面里面把查询条件传递给要展示数据的子页面,然后子页面加载的时候把查询条件传递给action,子页面用window.open……


1、jsp将查询条件以表单形式提交到action,这个不能实现吗?
只要有办法把查询条件拿到action中,害怕下一个子画面无法拿到吗?

2、动态报表,一般要考虑使用子报表+交叉报表实现。至于什么是交叉报表,如何使用,这个你去百度搜索一下例子,很多。你要举一反三,因为交叉报表的例子很简单的,肯定跟你的需求不符合。

#2


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

#3


1:  我觉得 这个 应该 异步去获取数据 而不走STRUTS2的流程
2:  这个。。。

顺便说一下 你这个需求 设计 不如 直接查询后 弹出个EXCEL展示

#4


设计很重要 你可以引导客户 让他知道这么做更好

#5


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


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

#6


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

#7


redirect方式的话得用session了。
正常的话,forward方式下,request在window.open下的页面应该好用。

然后子页面加载的时候把查询条件传递给action,子页面用window.open打开??
LZ 上面这句话的代码能否帖下?

#8


lz这要说那是提交月份后的数据没有返回到前台页面上来吗、?这要你要看看你跳转的方式是那种?

2个问题那个格式是excel还是页面形式的?如果是excel的那在后台代码迭代的时候就要控制合并表格了;若是以页面形式展示的话,在页面迭代的时候会有个cont属性记录迭代次数的,如何把那一<td>标签跨cont行就行了

#9


具体的就是
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");

},
功能就是点击查询的时候弹出一个月份选择的对话框,选择月份后对话框关闭然后弹出打开那个新的子页面,然后再新打开那个子页面上显示查询出来的数据

#10


引用 8 楼  的回复:
lz这要说那是提交月份后的数据没有返回到前台页面上来吗、?这要你要看看你跳转的方式是那种?

2个问题那个格式是excel还是页面形式的?如果是excel的那在后台代码迭代的时候就要控制合并表格了;若是以页面形式展示的话,在页面迭代的时候会有个cont属性记录迭代次数的,如何把那一<td>标签跨cont行就行了


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

#11


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>

#12


引用 11 楼  的回复:
1. 我觉得很简单,你用window.open打开的不就是父子页面吗?去古哥一下我记得有window.parent可以获取到父页面的方法,参数,并且可以调用父页面的方法执行,父页面也可以控制子页面的方法执行,这个古哥一下就可以找到了。
2. 动态生成表格的问题,其实也挺简单的,你说的项目名称只要生成一次。代码你改改,动态生成应该没啥问题的,以前我做动态生成考核表比你这个更复杂都可以做出来。

……


嗯,非常感谢,这种方法可以实现,我去试试看,非常感谢大家,结贴吧