程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 有關於整體刷新和局部刷新frameset窗口

有關於整體刷新和局部刷新frameset窗口

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

遇到這種這種分割頁面,大家首先想到是frameset,使用framset分割多種frame,這種方式簡單。若是不喜歡使用framset,喜歡前台設計的人也許會選擇p拼接,浮動,這就考查css樣式的功底了。

這次主要講解局部刷新的問題。需求是:左邊frame,右邊frame。

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

為了方便理解,左邊Frame簡稱LeftFrame,右邊Frame簡稱RightFrame;假如我提交RightFrame頁面,需要更新LeftFrame【動態】頁面。那如何辦呢?

其實就是從數據庫中重新讀數據;

代碼如下:

<FRAMESET cols = "280,*" frameborder=yes bordercolor=silver>
<FRAME SRC="modifyMenu!showTreeMenu" NAME="menuTree" SCROLLING="No" id="leftTree">
<FRAME SRC="showModifyMenu.jsp" NAME="main" SCROLLING="AUTO" id="showModifyMenu">
</FRAMESET>

其中modifyMenu!showTreeMenu是轉向到tree.jsp頁面

現在項目中,前台使用struts2,當提交右邊頁面數據時,當時設想:然後再次跳轉到主界面,相當於重新讀取數據,但是加載的主界面竟然是顯示在右邊區域,這樣就成了兩個LeftFrame。即使更改Struts2中的resultType的重定向也不可以。

最後,竟然一個簡單的JS解決問題。

在提交右邊頁面RightFrame,使用JS更新左邊LeftFrame。如下:

在rightFrame中的body的onload的事件:

代碼如下:

function init(){
//leftTree是左邊Frame的id
//重新加載這個頁面
window.parent.frames[ "leftTree"].location.reload();
}

window.parent.frames[ "leftTree"].location.reload()

當時你在某一個思路上山窮水盡的時候,可以嘗試換種思路,也是會柳暗花明.

需求如下:若刷新右邊RightFrame頁面,只刷新部分左邊LeftFrame【刷新某個p】。

提到局部部分刷新,肯定想到是Ajax局部刷新。

那我們用純js的Ajax基礎實現:

代碼如下:

function createXmlHttpRequest(){
if(window.XMLHttpRequest){
return new XMLHttpRequest();
}else if(window.ActiveXObject){
return new ActiveXObject("Microsoft.XMLHTTP");
}
}

function init(){
//則進行局部刷新
var xmlHttpReq=createXmlHttpRequest();
//獲得出發的url的,比如struts2的action或者servlet或jsp頁面
var url="success.jsp";
xmlHttpReq.open("GET",url,true);

//因為你在作一個異步調用,
//所以你需要注冊一個XMLHttpRequest對象將調用的回調事件處理器
xmlHttpReq.onreadystatechange=function(){

if(xmlHttpReq.readyState==4){
if(xmlHttpReq.status==200){
//使用parent獲得左邊頁面中的某一個p,然後更改展示的外觀
window.parent.frames["leftTree"].document.getElementById(pId).innerHTML="測試";
}else{

alert(xmlHttpReq.status+xmlHttpReq.responseText);

}
}
};

xmlHttpReq.send(null);
}

window.parent.frames["leftTree"].document.getElementById(pId).innerHTML=xmlHttpReq.responseText

後台action中的寫法如下:

代碼如下:

HttpServletResponse response=ServletActionContext.getResponse();
response.setContentType("text/html;charset=utf-8");
out=response.getWriter();
out.print("從後台傳入的數據");

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved