之因此查找的这篇文章 是由于本身当时的思路是走不通的。。。
html
page1 里面 有一个button
数据库
<input type="button" class="button" onclick="doMassRejection()" name="MassRejection">框架
在原来逻辑里面 MassRejection 是要去更新数据库的,而且参数比较多。测试
click button 后须要弹出来一个新页面page2url
这个页面只有一个参数 只有当这个页面点击OK button时 才能够把参数存入数据库 而且再执行MassRejection 里面的逻辑。spa
想法1: 把 page1 MassRejection action后的 formBean 传到page2 ,在page2 里面点OK 时 再把这formBean 继续传到后台再执行ssr
可是由于formBean 字段不是只有string int 类型的 ,还有list collection 之类的 无法同步在下一个action里面的orm
因此想法1 就这么over了 xml
下面看 想法2 (同事给的方法,也Google了 。。)htm
在一个页面的JS方法里调用另一个页面,以后将新页面获得的值传回调用页面的问题,采用如下方式实现,具体实现:
父页面a.html:
<script>
function getLink(){
window.open("b.html","newindow","width=100,height=200,toolbar=no,scrollbars=no");
}
function getNewLinkValue(value){
alert(value);//能够获得子页面设的值
//这个是已经能获得page2 的属性值了 ,这时候须要把数据放在formBean里面 方便传入action
// document.massreject.rejectReason.value=value;
而后把以前MassRejection 的逻辑写在这里面
}
</script>
<input type="button" value="测试子页面调用" onclick="getLink();"/>
子页面b.html:
<script>
var wholeValue;
function setNewLinkValue(){
//以前有一个JS方法构造了wholeValue的值
window.opener.getNewLinkValue(wholeValue);//设置传递给父页面的值
}
</script>
小结:
window.open(url, name, features, replace) ;实现打开一个新窗口
其中:url指的是指向要在新窗口中显示的文档的URL;name该参数用于设置新窗口的名称,可是相同name的窗口只能建立一个,要想建立多个窗口则name不能相同;features用于设置新窗口的设置(如:显示宽高等信息);replace 指可选布尔参数,设置新窗口中的操做历史的保存方式,其中true 指建立新历史记录,false指替换旧的历史记录。
而window.opener只是对弹出窗口的母窗口的一个引用,指调用window.open方法的窗口;能够利用window.opener.location.reload();实现刷新父页面的功能;
在此也了解了window.opener与window.parent的区别:
window.parent能获取一个框架的父窗口或父框架。顶层窗口的parent引用的是它自己。(一般在使用ifream调用或者location.href调用时可使用此)
window.opener引用的是window.open打开的页面的父页面,当一个窗口用open方法打开了一个新窗口的时候,opener属性就生效;
在咱们项目里面 url 和action都是配置在配置文件xml里面的
var newWindow;
newWindow=window.open("<%=SystemConstant.URL_PREFIX%>/com.ebao.jewel.gs.pol.prdt.master.ctrl.MassRejectionAction?<url:requestTokenParam/>&sActionType="+sActionType);
newWindow.focus();
我打开窗口是用的这种方法。。