正常情况下struts中的forward是不能跳转到frame框架中的。在实验了一天后终于找到了解决的办法:利用ajax的返回值生成页面。
1.在前台使用ajax请求action:
var par = "zczt="+zczt+"&sbmc="+sbmc+"&cpu="+cpu+"&xsk="+xsk+"&zb="+zb+"&nc="+nc +"&ypzx="+ypzx+"&ypzd="+ypzd+"&os="+os+"&gbrqqs="+gbrqqs+"&gbrqjs="+gbrqjs+"&r=" + Math.random();; var url="operate/searchbfzc.do?"+par;
useAjax(url);
function useAjax(url){ create(); xmlHttpRequest.open("POST",url,true); //定义触发事件 xmlHttpRequest.onreadystatechange=processresult; //发出异步请求 xmlHttpRequest.send(null); }
2.在后台action中跳转到目标页面:
request.setAttribute("searchResult", searchResult); return mapping.findForward("searchResult");
3.在跳转后在前台用ajax接受返回来的信息(该信息为网页的代码)
function processresult(){ //异步交互完成,并且交互过程中没有发生异常 if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status==200){ //获取服务器返回的文本信息 var mess = xmlHttpRequest.responseText; if(mess.length>50){ document.write(mess); }else{ window.alert(mess); window.location.href="zcbfH.jsp"; } } }
使用这句话来判断返回的为提示信息还是网页源码mess.length>50,一般的提示信息比较短可以根据自己的需要进行调整
主要是使用document.write(mess);这句话将返回的网页源码进行解析生成新的页面,而且看不出抖动。
else里的大家都能看懂就不说了。
附上源码(ajax的代码也是从网上抄的,具体谁的给忘了。莫怪罪。呵呵)希望对大家能有些许帮助:java的ResultSet result = DataSourceImp.getInstance().query(querySql); try { //if(result.isFirst()){//如果有值 boolean hasResult = false; while(result.next()){ hasResult = true; infoSet = new ZcbfSearchInfoSet(); infoSet.setAssetsClass(result.getString("assetsclass")); infoSet.setAssetsName(result.getString("NAME")); infoSet.setAssetsNo(result.getString("assetsNo")); infoSet.setCgTime(result.getDate("BUYTIME")); infoSet.setGbTime(result.getDate("INVALIDTIME")); infoSet.setserialNo(result.getString("serialNo")); String confInfo = "IP:"+result.getString("IP")+"CPU:"+result.getString("CPU")+"MEMORY:"+result.getString("MEMORY") +"DISK:"+result.getString("DISK")+"GRAPHICS:"+result.getString("GRAPHICS")+"MOTHERBOARD:"+result.getString("MOTHERBOARD")+ "OS:"+result.getString("OS"); System.out.println(confInfo); infoSet.setConfigInfo(confInfo); searchResult.add(infoSet); } if(hasResult){ request.setAttribute("searchResult", searchResult); return mapping.findForward("searchResult"); //return null; }else{ //设置返回前台的编码 response.setContentType("text/html;charset=utf-8"); //设置返回前台的写入方法 PrintWriter out=response.getWriter(); out.println("没有查询到信息,请核对后再次查询!"); out.flush(); out.close(); return null; }
js的function useAjax(t){ var par = t;//为参数列表 var url="operate/searchbfzc.do?"+par; //调用sendurl()方法,发出异步请求 sendurl(url); } var xmlHttpRequest; //手写创建XMLHttpRequest对象进行异步数据交互 function create(){ //创建XMLHttpRequest对象,浏览器兼容问题 if(window.XMLHttpRequest){ //FireFox --Linnux,Mozillar--Linnux以前主流(修正bug),Opera手机,Safari苹果,IE7,IE8 xmlHttpRequest = new XMLHttpRequest(); if(xmlHttpRequest.overrideMimeType){ xmlHttpRequest.overrideMimeType("text/xml"); } }else if(window.ActiveXObject){ //IE6、IE5.5、IE5以下 //index靠前的较新 var avtivexName = ["MSXML2.XMLHTTP","Microsoft.XMLHTTP"]; for(var i=0;i<activexName.length;i++){ try{ xmlHttpRequest = new ActiveXObject(activexName[i]); break; }catch(e){ } } } if(!xmlHttpRequest){ alert("XMLHttpRequest对象创建失败!"); return; }else{ //alert("XMLHttpRequest对象创建成功!"); } } //建立异步连接,发送异步请求 function sendurl(url){ create(); //建立连接 //xmlHttpRequest.open("get",url); xmlHttpRequest.open("POST",url,true); //xmlHttpRequest.setRequestHeader( "Content-Type ","text/html;charset=gb2312 ") ; //xmlHttpRequest.setRequestHeader( "Content-Type",'application/x-www-form-urlencoded;charset="utf-8"'); //定义触发事件 xmlHttpRequest.onreadystatechange=processresult; //发出异步请求 xmlHttpRequest.send(null); } //处理相应结果的方法 function processresult(){ //异步交互完成,并且交互过程中没有发生异常 if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status==200){ //获取服务器返回的文本信息 var mess = xmlHttpRequest.responseText; if(mess.length>50){ //alert(mess.length); //window.mainFrame.location.reload(); document.write(mess); //top.window.mainFrame.innerHTML=mess; }else{ window.alert(mess); window.location.href="zcbfH.jsp"; } } }