整體重新整理和局部重新整理frameset視窗問題深入探討

來源:互聯網
上載者:User

在項目中,經常會遇到頁面分割,最常見的系統或網站的主介面。首頁面分為,上面系統簡介、下面作者簡介、左邊系統功能菜單、右邊則是菜單真正展示的介面。

遇到這種這種分割頁面,大家首先想到是frameset,使用framset分割多種frame,這種方式簡單。若是不喜歡使用framset,喜歡前台設計的人也許會選擇div拼接,浮動,這就考查css樣式的功底了。
這次主要講解局部重新整理的問題。需求是:左邊frame,右邊frame。

大家肯定疑問,這樣重新整理沒有問題啊。的確如此。現在使用framset,分割兩frame,各自更新各自。右邊frame展示菜單儘管更新提交即可。對左邊frame是沒有影響的。

為了方便理解,左邊Frame簡稱LeftFrame,右邊Frame簡稱RightFrame;假如我提交RightFrame頁面,需要更新LeftFrame【動態】頁面。那如何辦呢?
其實就是從資料庫中重新讀資料; 複製代碼 代碼如下:<FRAMESETcols="280,*"frameborder=yesbordercolor=silver>
<FRAMESRC="modifyMenu!showTreeMenu"NAME="menuTree"SCROLLING="No"id="leftTree">
<FRAMESRC="showModifyMenu.jsp"NAME="main"SCROLLING="AUTO"id="showModifyMenu">
lt;/FRAMESET>

其中modifyMenu!showTreeMenu是轉向到tree.jsp頁面
現在項目中,前台使用struts2,當提交右邊頁面資料時,當時設想:然後再次跳轉到主介面,相當於重新讀取資料,但是載入的主介面竟然是顯示在右邊地區,這樣就成了兩個LeftFrame。即使更改Struts2中的resultType的重新導向也不可以。

最後,竟然一個簡單的JS解決問題。
在提交右邊頁面RightFrame,使用JS更新左邊LeftFrame。如下:
在rightFrame中的body的onload的事件: 複製代碼 代碼如下:functioninit(){
//leftTree是左邊Frame的id
//重新載入這個頁面
window.parent.frames["leftTree"].location.reload();
}

window.parent.frames["leftTree"].location.reload()
當時你在某一個思路上山窮水盡的時候,可以嘗試換種思路,也是會柳暗花明.
需求如下:若重新整理右邊RightFrame頁面,只重新整理部分左邊LeftFrame【重新整理某個div】。
提到局部部分重新整理,肯定想到是Ajax局部重新整理。
那我們用純js的Ajax基礎實現: 複製代碼 代碼如下:functioncreateXmlHttpRequest(){
if(window.XMLHttpRequest){
returnnewXMLHttpRequest();
}elseif(window.ActiveXObject){
returnnewActiveXObject("Microsoft.XMLHTTP");
}
}
functioninit(){
//則進行局部重新整理
varxmlHttpReq=createXmlHttpRequest();
//獲得出發的url的,比如struts2的action或者servlet或jsp頁面
varurl="success.jsp";
xmlHttpReq.open("GET",url,true);
//因為你在作一個非同步呼叫,
//所以你需要註冊一個XMLHttpRequest對象將調用的回調事件處理器
xmlHttpReq.onreadystatechange=function(){
if(xmlHttpReq.readyState==4){
if(xmlHttpReq.status==200){
//使用parent獲得左邊頁面中的某一個div,然後更改展示的外觀
window.parent.frames["leftTree"].document.getElementById(divId).innerHTML="測試";
}else{
alert(xmlHttpReq.status+xmlHttpReq.responseText);
}
}
};
xmlHttpReq.send(null);
}

window.parent.frames["leftTree"].document.getElementById(divId).innerHTML=xmlHttpReq.responseText
後台action中的寫法如下: 複製代碼 代碼如下:01.HttpServletResponseresponse=ServletActionContext.getResponse();
response.setContentType("text/html;charset=utf-8");
out=response.getWriter();
out.print("從後台傳入的資料");

兩種重新整理方式,一種整體重新整理;一種局部重新整理;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.