之因此查找的這篇文章 是由於本身當時的思路是走不通的。。。
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();
我打開窗口是用的這種方法。。