首页 新闻 会员 周边 捐助

java struts2实现ajax调用action实现页面跳转 问题

0
悬赏园豆:60 [已解决问题] 解决于 2019-02-19 10:20

表单提交可以,不使用ajax
想做异步跳转登陆页面,ajax 可以找到action动作 在执行完方法后 return SUCCESS ,struts 不能返回数据回前端。 这个要怎么解决这个问题啊 本人菜鸟一个
前端代码:
function btnLogin() {
$("#btnLogin").click(function() {
var username = $("input[name=username]").val();
var password = $("input[name=password]").val();
$.ajax({
type : "post",
url : "loginUsersAction",
data : {
userName : username,
passWord : password
},
dataType:"json",
Success : function(data) { //数据未能返回
<span>alert</span>("返回成功");
var value = data.flag;//转化
if (value == "login") {
location.href = "/users/Users_login_success.jsp";
} else {
<span>alert</span>(value);
}
}
});
});
}
$(document).ready(function() {
btnLogin();
});
action代码:
public String login()
{
String username = request.getParameter("userName");
String password = request.getParameter("passWord");
UsersDAO udao=new UsersDaoImpl();
//获取数据
users.setUsername(username);
users.setPassword(password);
if(udao.usersLogin(users))
{
System.out.println("用户名:"+users.getUsername());
result="login";
return SUCCESS; //断点 会进行return SUCCESS;这一步
} else {
System.out.println(".action login()错误!");
return "login_failure";
}

}

struts2 代码:
<package name="users" namespace="/users" extends="struts-default,json-default">
<action name="*UsersAction" class="action.UsersAction" method="{1}">
<result type="json">
<param name="root">result</param>
</result>
<!--
<result name="login_success">/users/Users_login_success.jsp</result>
-->
</action>
</package>
</struts>

web.xml 配置:
<display-name>JavaSchoolWeb</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

提笔的主页 提笔 | 初学一级 | 园豆:98
提问于:2019-02-15 10:42
< >
分享
最佳答案
0

在jquery 添加
e.preventDefault();
阻止表单提交

提笔 | 初学一级 |园豆:98 | 2019-02-19 10:15
其他回答(1)
0

第一,返回的Success没有向前台输出。前台接受不到数据。
第二,如果想用struts跳转,返回的
<!--
<result name="login_success">/users/Users_login_success.jsp</result>
-->已经被注销,肯定不能跳转。并且 return SUCCESS; //断点 会进行return SUCCESS;
不知道你SUCCESS是什么,但是应该是return “login_success”

收获园豆:60
小何人家 | 园豆:329 (菜鸟二级) | 2019-02-15 11:04

我试过return “login_success” 没用 才注释的,
return SUCCESS
会直接转到这个(这个我是下载 别人的 可是把这个方法搬到 我这里就行不通了 )
<result type="json">
<param name="root">result</param>
</result>

支持(0) 反对(0) 提笔 | 园豆:98 (初学一级) | 2019-02-15 11:17

@提笔: 那你就把 return SUCCESS ;改为json字符串,像前台输出。

支持(0) 反对(0) 小何人家 | 园豆:329 (菜鸟二级) | 2019-02-15 11:51

@小何人家:
String json="[{"user":"login"}]";
JSONObject jsonbject=JSONObject.fromObject(json); //转换成json类型数据
System.out.println(json.toString());
result=jsonbject.toString(); //赋值给result
这样写 断点没反应 都不会到 return SCCESS ; 这步了

支持(0) 反对(0) 提笔 | 园豆:98 (初学一级) | 2019-02-15 14:03

@小何人家: 会是因为 我用的是MyEclisp 这个问题 导致 被拦截?
严重: Actual exception
Could not load class org.apache.struts2.s1.ActionFormValidationInterceptor. Perhaps it exists but certain dependencies are not available? - interceptor - jar:file:/E:/User/.metadata/.me_tcat85/webapps/JavaSchoolWeb/WEB-INF/lib/struts2-struts1-plugin-2.2.1.jar!/struts-plugin.xml:33:118

支持(0) 反对(0) 提笔 | 园豆:98 (初学一级) | 2019-02-15 14:05

@提笔:
后台登录方法
login(){
XXXX登录验证
返回向前台输入登录信息
ToJsonUtil.outString("{success:true,flag:true,message:'登录成功!'}");
return null;
}
具体像前台输出数据方法 class ToJsonUti l静态 outString(String Str)方法
/**向pc前台输出JSON数据*/
public static void outString(String str){
try {
HttpServletResponse response=ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
PrintWriter out=response.getWriter();
out.print(str);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}

ajax 中 Success 回调是表示前后台交互成功,并不一定是登录成功,交互成功后看返回的值,看是否登录成功。如果信息错误就返回相信的错误信息,成功就跳转你相应的界面

支持(0) 反对(0) 小何人家 | 园豆:329 (菜鸟二级) | 2019-02-18 16:26

@小何人家: 谢谢你 我找到了问题所在了 我用的是
<button type="submit" id="btnLogin" class="btn btn-primary btn-block">登录</button>
虽然可以异步提交过去 可最后返回结果 会是表单提交 导致数据没有回调 到前端
success : function(data) {} 这步
所以在前面添加e.preventDefault(); 阻止表单提交

支持(0) 反对(0) 提笔 | 园豆:98 (初学一级) | 2019-02-19 10:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册