读书人

Struts重定向页面有关问题

发布时间: 2011-11-29 22:04:11 作者: rapoo

Struts重定向页面问题
问题:

点击主页面一个查询按钮,我用window.showDialogModal('search.jsp') 弹出search.jsp页面,
在search.jsp页面输入好查询条件点击提交,便进入ACTION进行处理后,便用mapping.findForward('display')
通过配置文件再转到主页面。(就这时问题出现了,他不是刷新主页面 而是重新又打开了个主页面)


需求:让他重新定向到原主页面,不让他新打开。

说明:请勿让我绕道行走,如果不用window.showDialogModal打开 直接用ACTION就没问题。但我现在就像搞明白类似于
window.open等这种新打开的页面,怎么重新定向到主页面。



[解决办法]
我好像做过这样的东西,给你一些代码不知道有没有用
这是一个userlist.jsp页面,其中有一个按钮是增加用户的,点击该按钮会调用一段js
function adduser()
{

var returnValue;

returnValue = window.showModalDialog('../userAdmin/userAdminAction.do?action=initAdd',returnValue,'dialogWidth:600px; dialogHeight:750px; center:Yes; resizable: Yes; help: No;');

if (returnValue=='true')
{
alert('<bean:message bundle="common" key="new.success"/>');
window.location="userList.jsp";
}
}
我这里的action处理完毕后会导向一个adduser.jsp页面,这个action只是为了在adduser.jsp显示时做一些处理,然后,我在adduser.jsp中使用了ajax
核心代码如下
var xmlHttp = init();
xmlHttp.open("POST", url, false);
xmlHttp.send();
if (xmlHttp.responseText =="repeat")
{
alert('<bean:message bundle="common" key="username.repeat"/>');
return;
}
else
{
returnValue='true';
window.close();
}
adduser.jsp也是提交到一个action的,但是这个action返回值为空,但是里面有如下的语句response.getWriter().write("success");这个语句
会由xmlHttp.responseText 获得的,此时会返回 returnValue='true'这样的话,页面就又返回到userlist.jsp了,不知道说清楚没有。

[解决办法]
这个是adduser.jsp提交到的action
public ActionForward saveUser(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception
{

/**登录名*/
String loginname=request.getParameter("loginname");

/**全名*/
String name=request.getParameter("name");

/**密码*/
String password=request.getParameter("password");

/**部门*/
String department=request.getParameter("department");


/**描述*/
String description=request.getParameter("description");



/**所在组*/
String selectedgroup=request.getParameter("selectedgroup");

----------略------------------

boolean lgname=userService.getUser(hql.toString());


if(!lgname)
{
response.getWriter().write("repeat");

return null;
}


userService.saveUser(user,group,paramIds,selectValues,rootpath,resourceService);
-----略---------
return null;

}
[解决办法]
在主页面上设置target
[解决办法]
在head标签中加入

HTML code
<base href="<%=basePath%>" target="_self">
[解决办法]
原因: 你用window.showDialogModal('search.jsp') 弹出search.jsp页面,那你提交的当然是search.jsp中的数据,那跳转当然也跳转'search.jsp'
解决办法: search.jsp中的提交交由打开他的页面去做,可以在打开他的页面上加入hidden框,search.jsp中的提交按钮用来对打开他的页面中的hidden进行付值(windows.opener.document.getElementById("xxxx") = document.getElementById("xxxx")),并且调用window.opener.submit();把hidden框提交到后台处理
[解决办法]
学习~~~
------解决方案--------------------


因为你的查询是跳出窗口,所以就重新定向到你的跳出窗口里了,你可以先关掉你的弹出窗口,然后刷新父页面呢?
[解决办法]
不管用不用ajax,新窗口和原窗口的关系必须要明确
target="_parent"或者window.opener或者parent.js方法()
[解决办法]
通过action处理,是不会多弹出一个窗口吗?
window.showDialogModal是属于GUI程序了吧!!
改成Web程序算了.
[解决办法]

探讨
----上面大家要明确 我在弹出页面点击确认 要经过Action进行按查询条件逻辑判断 然后将取得数据 重新返回到父页面上显示

所以单纯刷新父页面没用吧

[解决办法]
探讨
----上面大家要明确 我在弹出页面点击确认 要经过Action进行按查询条件逻辑判断 然后将取得数据 重新返回到父页面上显示

所以单纯刷新父页面没用吧

[解决办法]
不能forward直接指向父页面吗???
[解决办法]
如果是不刷新父页面的话,可以使用window.returnValue将window.showDialogModal('search.jsp')的查询结果返回。
[解决办法]
这个我一般用的是window.open,像你这种情况可以查书了解这两个的区别。。。
[解决办法]
路过。。
[解决办法]
是这样,我们当时做这个项目的时候没有用什么框架,就直接使用的不同的ajax方式
[解决办法]
帮顶。。。。。。
[解决办法]
路过。。
[解决办法]
首先你要明白window.showDialogModal是可以返回值的。所以当你的action处理完数据后,只需要将刚才处理后的参数(如果是insert或者update可以返回主键,如果是void,可以返回布尔值)返回到主页面,并且关闭刚刚弹出的窗口。

之后在主页面中,可以根据返回参数,对主页面进行更新。方法很多,像ajax或重新请求页面都是可以的
[解决办法]
使用window.showDialogModal的时候把要serch的条件传到returnvalue里面,然后在主页面中提交这样应该可以的吧

[解决办法]
方法1
在search.jsp页面中增加以下代码:<base target="_self">
提交action处理后,返回一个数值到search.jsp页面,在search.jsp页面初始化的时候,判断是否后台处理成功,成功的话,search.jsp页面关闭,给父画面一个返回值。在父画面上,判断返回值,进行刷新。

方法2
在search.jsp页面,把要提交的数据都保存在父画面的隐藏变量中,关闭search.jsp页面,父画面提交。

注意:如果需要在后台验证search.jsp页面的输入数据,那么推荐用 方法1

希望能对楼主有所帮助
[解决办法]
灌水来了
[解决办法]
我正做这么一个程序
用JS就可以刷新主页面晚上也有类似的例子
我给出JS的程序源码


一个是打开js页面
Java code
function openWin(f,n,w,h,s){    sb = s == "1" ? "1" : "0";    l = (screen.width - w)/2;    t = (screen.height - h)/2;    sFeatures = "left="+ l +",top="+ t +",height="+ h +",width="+ w            + ",center=1,scrollbars=" + sb + ",status=0,directories=0,channelmode=0";    openwin = window.open(f , n , sFeatures );    if (!openwin.opener)        openwin.opener = self;    openwin.focus();    return openwin;}
[解决办法]
探讨
我正做这么一个程序
用JS就可以刷新主页面晚上也有类似的例子
我给出JS的程序源码


一个是打开js页面

Java codefunction openWin(f,n,w,h,s){
sb = s == "1" ? "1" : "0";
l = (screen.width - w)/2;
t = (screen.height - h)/2;


sFeatures = "left="+ l +",top="+ t +",height="+ h +",width="+ w
+ ",center=1,scrollbars=" + sb + ",status=0,directories=0,channelmode=0";


[解决办法]
你要那样做确实不好做啊!
为实现这个功能...
你可以在打开search.jsp页面时...把父页面关闭.
[解决办法]
学习...
[解决办法]
可以说详细点么
[解决办法]
学习
[解决办法]
路过。。
[解决办法]
好啊,very good!!
[解决办法]
帮顶帮顶,受教
[解决办法]
学习...受教...
还向window.open是新打开窗口的,用Location.href=...是在本页面打开吧...
[解决办法]
mark
[解决办法]
AJAX可以实现吧???!
[解决办法]
学习~~~
[解决办法]

[解决办法]
<base href="<%=basePath%>" target="_self">
[解决办法]
努力 领悟
[解决办法]

[解决办法]
c
[解决办法]
在serach.jsp的head部分添加<base target="_self">试试。(尽量放在<tilte>标签后面吧)
[解决办法]
提交后可以刷新主页面
[解决办法]
<base href=" <%=basePath%>" target="_self">或者是target="parent"
[解决办法]
吸取
[解决办法]
你的意思我没看太明白,不过问题跟我遇到过的问题应该大概一样。
这个问题是窗口和对话框的问题,具体原因我也没搞太清楚,。
不过我解决了,你用showDialogModal弹出来search.jsp用iframe包含起来就可以解决这个问题了。
[解决办法]
ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
[解决办法]
dfsfsddddddddddddd
[解决办法]
没仔细研究 混分来着
[解决办法]
学习了

[解决办法]
我想你在实现这种功能之前应该先把这些机制想清楚,代码倒是不急!

在你原来的母窗口中,点击查询,生成了一个新子窗口,然后在这个了窗口中输入查询的具体条件,点击"提交查询",而你想要的效果是让这个子窗口关闭,又回到母窗口页面<没理解错吧?>_<>
我们将母窗口取名叫(openerPage)子窗口叫(childPage),在childPage页面中提交数据到Action中,Servlet将提交上来的条件查询结果,放在request中,然后在request中放一个小标识,通知子窗口,这一次查询顺利结束,具体代码为:
request.setAtribute("result","ok");


最后我们又mapping.findworad("chilePage.jsp")页面中去,在chilePage.jsp页面中,写上一段小代码和小Script
funcion RefreshOpener(){
opener.Refresh();//刷新母窗口,Refresh()方法名要与母窗口的方法名保持一致.
windows.close();//关闭子窗口
}
<%
String result = (String)request.getAtribute("result");
if("ok".equal(result)){
out.println("RefreshOpener();");
}
%>//具体API有没有写对,我不太清楚,你自己下去更改一下>_<
===========================最后在母窗口中的Script====================================
function Refresh(){
window.location.reload();//刷新母窗口
}
======================================================================================
注:我的解说思路是从一个程序运行的路线来一步步讲解的.应该还是比较好理解的.重要的是我的思路,不是代码!
[解决办法]
能不能先关闭父窗体,再打开forward指向那个啊.
[解决办法]
路过

[解决办法]
o mingbai l
[解决办法]
兄弟,不要在csdn上搞销售,遵守规则。。

[解决办法]
学习中...
[解决办法]
jf;asjdf;lkjsdkfjlksdjflk sdkflksdjflks slkdfjlksd s ;kldjf;lskdj;flk
[解决办法]
学习一下………………………………
[解决办法]
学习ing!
[解决办法]
学习了.
[解决办法]
学习~~
[解决办法]
刚开始学,来吸收下大家的仙气

[解决办法]
学习~~~
[解决办法]
我也想知道
[解决办法]
哎,这么多人回复,没一个说到点子上
window.showDialogModal打开的模态窗口里提交表单,不管怎么样都会打开一个新窗口
解决办法是,把页面放到iframe里面,在iframe里面提交就不会出现这种情况
添加一个jsp,就叫Iframe.jsp吧
在Iframe.jsp里,放一个iframe,这个iframe指向search.jsp
然后
window.showDialogModal('IFrame.jsp')
这样search.jsp里提交表单就不会在新窗口里打开了
[解决办法]
支持。
[解决办法]
支持
[解决办法]
点击主页面一个查询按钮,我用window.showDialogModal('search.jsp') 弹出search.jsp页面,
可以在search.jsp中写个js方法 把你写的查询条件赋值给父类窗口中的隐藏域,然后调用父类窗口里面的提交方法就行。
你试试。

[解决办法]

探讨
哎,这么多人回复,没一个说到点子上
window.showDialogModal打开的模态窗口里提交表单,不管怎么样都会打开一个新窗口
解决办法是,把页面放到iframe里面,在iframe里面提交就不会出现这种情况
添加一个jsp,就叫Iframe.jsp吧
在Iframe.jsp里,放一个iframe,这个iframe指向search.jsp
然后
window.showDialogModal('IFrame.jsp')
这样search.jsp里提交表单就不会在新窗口里打开了

[解决办法]
学习学习,高人多啊,我也同样有这样的问题啊
[解决办法]
mark
------解决方案--------------------


支持一下!!!!!!!
[解决办法]
支持一下!!!!!!!!!!!
[解决办法]
主页jsp上面加 <meta http-equiv="Pragma" content="no-cache">
清除IE缓存就好了,我曾遇到过,你试试。
[解决办法]
up
[解决办法]
tager
[解决办法]
又学到了 赞一个

[解决办法]
mark
[解决办法]
很简单,
1、不要在你的'search.jsp'页面中提交你的查询,让'search.jsp'将选择的查询条件返回给父页面,在父页面提交查询。
2、或者直接在'search.jsp'中提交父页面的表单,并在<head/>标签里<base target="_self">。(注意一定是父页面中form的action)
[解决办法]
要是仅仅在子页面中输入查询条件、将查询参数传送到父页面进行查询的话,我知道window.opener.FUNCTION(参数);可以将参数传回,不过这些都是在JAVASCRIPT中控制的。
[解决办法]
刚来到,累死了!
[解决办法]
阁下,可是返回到另外一个页面,然后点击确定就返回原先主页面吧,我这方法你试试,
核心就在<meta http-equiv="Refresh" content="0; URL=companyAll.do?method=findResumeName&fileNum=${fileNum}&memberId=${memberId}&cp=${cp}" />中


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Refresh" content="0; URL=companyAll.do?method=findResumeName&fileNum=${fileNum}&memberId=${memberId}&cp=${cp}" />
<meta name="author" content=",余兵,yubing,yubing@china.kjlink.com" />
<meta name="keywords" content=",,,," />
<meta name="description" content="" />
<meta name="robots" content="all" />
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript" language="javascript">
alert("收藏成功!");
</script>
</head>
<body>
<input type="hidden" name="fileNum" value="${fileNum}"/>
<input type="hidden" name="memberId" value="${memberId}"/>
<input type="hidden" name="cp" value="${cp}"/>
<br />
</body>
</html>
[解决办法]
可以在配置文件中完成
[解决办法]
学习。。。。。。
[解决办法]
挺好的东西,为什么我就是学不会呢
[解决办法]
再顶一次,持续学习
[解决办法]
好难啊,不学了,再见
[解决办法]

探讨
哎,这么多人回复,没一个说到点子上
window.showDialogModal打开的模态窗口里提交表单,不管怎么样都会打开一个新窗口
解决办法是,把页面放到iframe里面,在iframe里面提交就不会出现这种情况


添加一个jsp,就叫Iframe.jsp吧
在Iframe.jsp里,放一个iframe,这个iframe指向search.jsp
然后
window.showDialogModal('IFrame.jsp')
这样search.jsp里提交表单就不会在新窗口里打开了


[解决办法]
加<base target="_self"> 还有,你要在
showWindowDialog("search.jsp?time=" + new Date())
默认Dialog 缓冲的,
关键就是红色部分,
我以前遇见过这样的问题,也就是这样解决的.
<form action = name= 'id' >
</form>
注意,form 不要设置target ,默认是target ="_self"



[解决办法]
注意:而且一定要在head 标签里面

读书人网 >Java Web开发

热点推荐