求教 我实现用户登陆后返回登录前的页面 然而登录前的请求是ajax请求 所以action中没有返回值 ,登陆后再次返回该action请求已没有ajax可调用

烟雨凌 2015-04-27 11:25:52
求教 我实现用户登陆后返回登录前的页面 然而登录前的请求是ajax请求 所以访问的action中没有返回值 ,登陆后再次返回该action请求,此action方法没有返回值,是往ajax传json的 ,而此action现在不是ajax请求的 而是直接请求的 所以导致返回的json数据直接显示在页面上 。
所以我如果想登陆后 返回登录前的这种没有返回值的action应该怎么做的
求教

action代码:
	public void startLearn() throws ViewException{
RemoteUser user=(RemoteUser)UserSessionUtils.getCurrentUser();
String result="{'result':1}";
courseId=(Long) request.getAttribute("courseId");
String parameter = request.getParameter("courseId");
if(user!=null){
int sl=startLearnBiz.startLearn(user.getUid(),courseId );
if (sl==0){
result="{'result':3}";
}else{
result="{'result':2}";
}
}
try {
JsonUtils.ajaxRebackPage(result);
} catch (Exception e) {
}
}

js:

//针对ajax公共调用方法
function ajaxRequest(url,method,params,successfun,errorfun)
{
$.ajax({
url: url,
type: method,
dataType: 'jsonp',
jsonp: 'callback',
data:params,
success: function (data) {
if(successfun && typeof(successfun)=='function')
{
successfun(data);
}
},
cache: false,
error: function(xhr, errorText){
alert("error:"+xhr.responseText+" "+errorText);
if(errorfun && typeof(errorfun)=='function')
{
errorfun(xhr);
}
}
});
}

function startLearn(courseId){
var startlearnurl="learnAction!startLearn.action";
ajaxRequest(startlearnurl,"post","courseId="+courseId,startCallback,error);
}
function error(data){
alert(data);
if(data.responseText=="noLogin"){
window.location.href ="userAction!toLogin"; //跳转页面
}
}
function startCallback(data){
alert(data);
if(data){
if(data.result==1){
window.location.href="userAction!toLogin"
}else if(data.result==2){
<#if courseAttrBeans?exists && courseAttrBeans?size > 0>
<#list courseAttrBeans as courseAttrBean>
<#if courseAttrBean_index==0>
window.location.href="student!goToStudyPlay?tcaId=${courseAttrBean.tcaId}";
</#if>
</#list>
</#if>
}else if(data.result==3){
//未知错误
}
}
}

拦截器代码:

@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
ActionContext context = invocation.getInvocationContext();
// 获取session
Map<String, Object> session = context.getSession();
Object user = session.get("REMOTEUSER");
// 获取HttpServletRequest对象
HttpServletRequest req = ServletActionContext.getRequest();

// 用户还未登陆
if (user == null) {
// 获取此请求的地址,请求地址包含application name,进行subString操作,去除application name
String path = req.getRequestURI();
Map<String, String[]> params = request.getParameterMap();
String queryString = "";
for (String key : params.keySet()) {
String[] values = params.get(key);
for (int i = 0; i < values.length; i++) {
String value = values[i];
queryString += key + "=" + value + "&";
}
}
// 去掉最后一个空格
queryString = queryString.substring(0, queryString.length() - 1);
// 获得请求中的参数
// String queryString = req.getQueryString();
// 预防空指针
if (queryString == null) {
queryString = "";
}
// 拼凑得到登陆之前的地址
String realPath = path + "?" + queryString;
// 存入session,方便调用
session.put("prePage", realPath);


PrintWriter pw = response.getWriter();
String flag = "";
if(isAjaxRequest(request)){ //判断是否为json请求
PrintWriter printWriter = ServletActionContext.getResponse().getWriter();
printWriter.print("noLogin");
printWriter.flush();
printWriter.close();
return null;
}else{
return "login";
}
}
// 用户已经登陆,放行
return invocation.invoke();
}
...全文
131 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengyu_caihong 2015-04-28
  • 打赏
  • 举报
回复
没整明白你啥意思~但登录信息你可以存session里面啊~然后判断是否登录~

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧