-
Jquery的ajax异步交互在struts2中会执行return SUCCESS嘛?30
我在用Jquery的ajax 来完成一个用户名验证,当用户名密码正确后,却没有执行return SUCCESS跳转到相应的页面去。
PS:条件正确的话确实已经进入action里了。 后台有打印出来,但是就是不跳转。 那个大哥能帮我小弟解释下 代码如下:package com.kaige.action; import com.kaige.model.User; import com.kaige.service.UserService; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private String username; private String password; private String email; private String message; UserService userService; public void setUserService(UserService userService) { this.userService = userService; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String validateName() throws Exception { User user = new User(); user.setUsername(username); user.setPassword(password); if (!userService.exist(user)) { this.message = "notexist"; return "message"; } else { if(userService.loginValid(username, password)>0){ System.out.println("用户正常登陆"); return SUCCESS; } else{ this.message="nocorrect"; return "message"; } } } }
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>Login</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <script type="text/javascript" src="js/jquery.js"> </script> <script type="text/javascript" src="js/ajax.js"> </script> <script type="text/javascript" src="js/json.js"> </script> <script type="text/javascript"> $(function() { $("form :input").blur( function() { var $parent = $(this).parent(); $parent.find(".formtips").remove(); if ($(this).is("#username")) { if (this.value == "") { var errorMsg = '请输入用户名'; $parent.append('<span class="formtips ErrorMsg">' + errorMsg + '</span'); } } if ($(this).is("#password")) { if (this.value == "") { var errorMsg = '请输入密码'; $parent.append('<span class="formtips ErrorMsg">' + errorMsg + '</span'); } } }); $("#login") .click( function() { $("form :text").trigger('blur'); $("form :password").trigger('blur'); var numError = $("form .ErrorMsg").length; if (numError) { return false; } var param = $("form").serialize(); $ .ajax({ url : 'Login!validateName.action', data : param, dataType : 'json', type : 'POST', success : function(data) { if (data != null) { if (data.message == 'notexist') { $("#check") .html( "用户不存在,<a href='register.jsp'>请注册</a>"); return false; } if (data.message == 'nocorrect') { $("#check").html( "用户名或密码错误!请重新输入"); } } } }); }); }); </script> </head> <body> <form action="Login!validateName.action" method="POST"> <div class="int" id="userText"> <label for="username"> User Name </label> <input type="text" name="username" id="username" /> </div> <div class="int"> <label for="password"> Password  </label> <input type="password" name="password" id="password" /> </div> <div class="sub"> <input type="button" value="Login" id="login" /> <input type="reset" value="Reset" /> </div> <s:token/> </form> <div id="registerText"></div> <div id="check"></div> </body> </html>
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <constant name="struts.i18n.encoding" value="GBK"></constant> <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant> <package name="Jquery" extends="json-default"> <action name="Login" class="com.kaige.action.UserAction"> <result name="fail">/register_fail.jsp</result> <result name="success">/register_success.jsp</result> <result name="message" type="json"></result> <!-- <result name="invalid.token">/index.jsp</result> <interceptor-ref name="token"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref>--> </action> </package> </struts>
问题补充:顺便再问个问题。。。。
ajax 的异步刷新 遇到struts2的token防刷新令牌机制 是不是冲突 ?
我加了token之后 ajax 就会出现只与后台交互一次的影响。
去掉token之后 就会可以完美的刷新了。
那位大牛 顺便把这个问题解释下。
小弟先提高悬赏,然后在此谢过了。2012年6月22日 21:46
8个答案 按时间排序 按投票排序
-
ajax 是异步去掉你的方法。他返回时json 格式。而你通过return SUCCESS 是返回相应的 跳转页面。 ajax 是不具备页面跳转的。你只能自己手动写一个 loaction.href 来去做你的页面跳转。如果你用了ajax 就不能用 return SUCCESS 来做页面跳转的处理
2012年6月24日 11:01
-
action中不能像你这样返回。
PrintWriter pw = response.getWriter();
pw.write(message);
pw.flush();
pw.close();
页面中JS收到这个内容,再进行判断,再通过herf或 页面的form 进行跳转。
参考代码如下: $.post("verify.action",{userName:$('#userName_id').val(),activeCode:$('#activeCode_id').val(),verifyCodeType:$('#verifyCodeType_id').val()}, function(data){
if (data=="success"){
close();
var frm = document.getElementById('form1');
frm.action="verifyToRegisterPage.action";
frm.submit();
}2012年6月24日 10:22
-
Struts2 对Ajax提供了很好的支持,使用的是DOJO,如果你不会使用DOJO DWR的话,其实使用Struts2 提供的Ajax JSP tags 也是可以的,使用很简单。
使用名为Stream的Result 即可。
配置文件<action name="ajaxAction" class="com.yaxing.action.UnitInfoAction" method="findByUU"> <result type="stream"> <param name="contentType">text/html</param> <param name="inputName">inputStream</param> </result> </action>
Action:public String findByUU() throws Exception { try { Map session = ActionContext.getContext().getSession(); String ids = session.get("userId").toString(); listUnitInfo = this.unitInfoService.findByUU(java.net.URLDecoder.decode(userName, "UTF-8"), ids); if (listUnitInfo.size() > 0) { inputStream = new ByteArrayInputStream( "true".getBytes("utf-8")); } else { inputStream = new ByteArrayInputStream( "此单位帐号可以使用!".getBytes("utf-8")); } } catch (Exception e) { e.printStackTrace(); return INPUT; } return SUCCESS; }
页面:<tr> <td height="15" bgcolor="#FFFFFF"> <div align="center" class="STYLE1"> <div align="center">单位名称</div> </div> </td> <td height="15" bgcolor="#FFFFFF"> <div align="center"> <span class="STYLE1"> <input type="text" id="name" name="unitInfo.name" style="width: 120px" /> </span> </div></td> <td height="15" bgcolor="#FFFFFF"> <div align="center"> <span class="STYLE1"> <div id="nameTip" style="width: 120px"></div> </span> </div></td> </tr>
JS:<script language="javascript"> var myRequest; var flag; function t1() { //准备向后台传输的数据 var userName = document.getElementById("userName1").value; alert(userName); url = encodeURI(userName); url = encodeURI(url); //Ajax myRequest = new ActiveXObject("Msxml2.XMLHTTP"); myRequest.onreadystatechange = t2; myRequest.open("GET", "unitInfo/ajaxAction.action?userName=" + url, true); myRequest.send(null); } function t2() { if (myRequest.readyState == 4) { var ret = myRequest.responseText; //后续处理 if (ret == "true") { flag = false; document.getElementById("userName1Tip").innerHTML = "单位帐号重复,无法使用"; } else { flag = true; document.getElementById("userName1Tip").innerHTML = "此单位帐号可以使用"; } } } function checkForm() { return flag; } </script>
这样就是一个完整的例子了,希望对你有帮组!2012年6月23日 11:43
-
额 不小心点快了。。
第二 你如果用datadype json返回字符串数据,那么java代码里应该类似这样
if(userService.loginValid(username, password)>0){
System.out.println("用户正常登陆");
this.message ="success";
return SUCCESS;
}
success : function(data) {
if (data != null) {
if (data.message == 'notexist') {
$("#check") .html(
"用户不存在,<a href='register.jsp'>请注册</a>");
return false;
}
if (data.message == 'nocorrect') {
$("#check").html(
"用户名或密码错误!请重新输入");
}
if (data.message == 'success') {
$("form").submit();
}
}
}
就不可能即返回json又返回register_success页面。。。2012年6月23日 10:16
-
ajax异步地意思就是不刷新页面发送请求么,而且你这个代码有点乱。。。。
首先,你返回的success,message是和struts配置里的result name对应的 不是和ajax里的data对应的,返回的data是你result里的页面或者数据
第二 你如果返回字符串数据,那么java代码里应该这样
if(userService.loginValid(username, password)>0){
System.out.println("用户正常登陆");
this.message ="success";
return SUCCESS;
}
success : function(data) {
if (data != null) {
if (data.message == 'notexist') {
$("#check") .html(
"用户不存在,<a href='register.jsp'>请注册</a>");
return false;
}
if (data.message == 'nocorrect') {
$("#check").html(
"用户名或密码错误!请重新输入");
}
}
}
如果你要跳转,是要在js里自己控制跳转
2012年6月23日 10:12
-
ajax提交后返回的相应也是ajax接受的,所以你的页面被ajax得到,你并没有处理。建议返回truefalse然后window.location.href调到结果页
2012年6月23日 09:46
-
首先你的Ajax返回的数据格式是JSON,而你的SUCCESS应该是个页面吧。
其次Ajax是局部异步的,所以他不会直接影响的当前访问路径,即使返回的是HTML页面,也不会更改当前路径,你可以把这个HTML内容放到一个DIV中去显示。
看了下你的验证,你用JQuery把整个表单进行了序列化,用Ajax提交了整个Form所以当你提交一次后Token已经走了验证,而当前页面的Token值在HTML中并没有改变。所以只能实现一次验证,即使验证没有通过。
既然你都已经只验证用户名密码,也没有必要把整个form序列化,这样的话表单中的属性都会被提交包括你的Token的值。2012年6月23日 01:29
相关推荐
标题 "Jquery struts2 json 实现ajax" 涉及到的是在Web开发中使用jQuery库与Struts2框架结合处理JSON数据的Ajax技术。这个主题主要关注如何通过前端的jQuery实现异步请求,与后端的Struts2框架进行交互,从而更新...
在Web开发中,jQuery的AJAX功能经常被用于与服务器进行异步数据交换,而Struts2作为一款流行的Java Web框架,提供了处理前端请求的能力。本文将深入探讨如何使用jQuery的AJAX方法发送JSON对象数组到Struts2的Action...
总结来说,"jQuery+json异步实现JSP和struts2之间的数据传递"是Web开发中的常见实践,它利用jQuery的Ajax功能与Struts2的JSON支持,实现了前后端的数据同步,简化了开发流程,提高了应用程序的响应速度和用户体验。...
本文将详细讲解如何使用JQuery、JSON和Struts2框架来实现Ajax异步请求。 首先,JQuery是一个轻量级、高性能的JavaScript库,它简化了DOM操作、事件处理以及AJAX交互。在JQuery中,我们可以通过多种方法来发起Ajax...
在Struts2与jQuery的Ajax交互中,JSON扮演着数据载体的角色,可以高效地传输数据。 **2. Struts2 JSON插件** 为了支持JSON数据交换,Struts2提供了一个JSON插件。首先,需要在项目中添加该插件的依赖,并在struts....
在Web开发中,jQuery、Ajax、Struts2和JSON是常用的技术栈,它们结合使用能够构建动态、交互式的网页应用。下面将详细讲解这些技术及其在"JQuery发起ajax请求Struts2,并操作JSON数据的例子"中的应用。 **jQuery** ...
在Web开发中,jQuery、Struts2、Ajax和JSON是常见的技术组合,它们协同工作以实现动态、异步的数据交互。本示例将探讨如何利用jQuery的Ajax功能向Struts2框架发送请求,并以JSON格式接收响应数据。下面我们将详细...
在这个实例中,“整合jquery+json+struts2异步提交”是一个典型的前端与后端交互的示例,利用了jQuery的Ajax功能和Struts2框架处理JSON数据。下面我们将详细探讨这些技术及其相互配合的工作原理。 **jQuery** 是一...
在现代Web开发中,异步刷新(Ajax)技术已经成为一种不可或缺的交互方式,它使得页面无需完全刷新就能更新部分数据,提升用户体验。本实例将详细讲解如何利用jQuery库与Struts2框架结合,实现异步刷新功能。jQuery以...
在本案例"Struts2之struts2自带插件实现异步调用案例struts015"中,我们将探讨如何利用Struts2的插件机制和AJAX技术来实现异步数据交互。 首先,我们要了解AJAX(Asynchronous JavaScript and XML)的核心概念,它...
在成功回调中,jQuery会接收到Struts2返回的JSON数据,可以进一步处理。例如,更新DOM: ```javascript success: function(response) { var data = JSON.parse(response); // 更新DOM $('#someElement').text...
在本场景中,我们将探讨如何使用AJAX来传递JSON数组,并在Struts2的Action中接收和处理这些数据。 首先,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析...
在Struts2中,我们可以利用Ajax和JSON来实现数据的异步交互。 **一、引入所需库** 首先,为了在Struts2中使用Ajax和JSON,我们需要引入以下库: 1. Struts2的核心库:`struts2-core.jar` 2. Struts2的JSON插件:`...
Struts、jQuery、Ajax以及JSON是Web开发中的四个关键技术,它们在构建动态、交互式的Web应用程序中发挥着重要作用。下面将分别介绍这些技术的核心概念及其在实际应用中的结合使用。 **Struts框架**:Struts是Apache...
总的来说,jQuery与Struts2在Ajax上的结合是现代Web开发中的常见实践,它极大地提高了Web应用的交互性和效率。通过理解这些组件的工作原理和它们之间的交互方式,开发者能够构建出更高效、更灵活的Web应用程序。
5. **dojo或jQuery库**:虽然不是Struts2的官方组件,但在实现AJAX交互时,前端通常会使用这些JavaScript库。Dojo或jQuery简化了AJAX请求的编写,并提供了丰富的DOM操作功能,便于更新页面内容。 在实际开发中,...
在Struts2框架中整合Ajax以实现异步数据交互,JSON(JavaScript Object Notation)扮演了关键角色。JSON是一种轻量级的数据交换格式,它允许Web应用与服务器之间高效地传输数据,而无需进行繁琐的HTTP请求。在这个...
总结来说,"Struts2_jquery_json1.0.zip"是一个综合实例,展示了如何在Struts2框架中结合使用jQuery和JSON进行异步数据交互。通过学习这个实例,开发者可以更好地理解如何在Java后端与JavaScript前端之间有效地传递...
通过在后台Action中处理业务逻辑并返回JSON数据,前端JavaScript通过Ajax异步请求获取这些数据并更新界面,从而实现了无刷新的页面交互。这不仅提升了用户体验,也使得后端和前端的解耦更加明显,便于代码维护。
在Struts2中实现Ajax(Asynchronous JavaScript and XML)可以极大地提升Web应用的用户体验,因为它允许部分页面动态更新,而无需整个页面刷新。以下是对Struts2实现Ajax的详细解释: 1. **Ajax基础**: Ajax的...