0 0

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&nbsp </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个答案 按时间排序 按投票排序

0 0

struts1.x的是可以跳转的,struts2估计处理了不能跳转了,只能返回页面上用js处理。

2012年6月27日 09:15
0 0

ajax 是异步去掉你的方法。他返回时json 格式。而你通过return SUCCESS 是返回相应的 跳转页面。 ajax 是不具备页面跳转的。你只能自己手动写一个 loaction.href 来去做你的页面跳转。如果你用了ajax  就不能用 return SUCCESS 来做页面跳转的处理

2012年6月24日 11:01
0 0

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
0 0

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
0 0

额 不小心点快了。。

第二 你如果用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
0 0

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
0 0

ajax提交后返回的相应也是ajax接受的,所以你的页面被ajax得到,你并没有处理。建议返回truefalse然后window.location.href调到结果页

2012年6月23日 09:46
0 0

    首先你的Ajax返回的数据格式是JSON,而你的SUCCESS应该是个页面吧。
     其次Ajax是局部异步的,所以他不会直接影响的当前访问路径,即使返回的是HTML页面,也不会更改当前路径,你可以把这个HTML内容放到一个DIV中去显示。
    看了下你的验证,你用JQuery把整个表单进行了序列化,用Ajax提交了整个Form所以当你提交一次后Token已经走了验证,而当前页面的Token值在HTML中并没有改变。所以只能实现一次验证,即使验证没有通过。
    既然你都已经只验证用户名密码,也没有必要把整个form序列化,这样的话表单中的属性都会被提交包括你的Token的值。

2012年6月23日 01:29

相关推荐

    Jquery struts2 json 实现ajax

    标题 "Jquery struts2 json 实现ajax" 涉及到的是在Web开发中使用jQuery库与Struts2框架结合处理JSON数据的Ajax技术。这个主题主要关注如何通过前端的jQuery实现异步请求,与后端的Struts2框架进行交互,从而更新...

    jquery的ajax传json对象数组到struts2的action

    在Web开发中,jQuery的AJAX功能经常被用于与服务器进行异步数据交换,而Struts2作为一款流行的Java Web框架,提供了处理前端请求的能力。本文将深入探讨如何使用jQuery的AJAX方法发送JSON对象数组到Struts2的Action...

    jQuery+json异步实现JSP和struts2之间的数据传递

    总结来说,"jQuery+json异步实现JSP和struts2之间的数据传递"是Web开发中的常见实践,它利用jQuery的Ajax功能与Struts2的JSON支持,实现了前后端的数据同步,简化了开发流程,提高了应用程序的响应速度和用户体验。...

    JQuery,JSON,Struts2实现Ajax异步请求

    本文将详细讲解如何使用JQuery、JSON和Struts2框架来实现Ajax异步请求。 首先,JQuery是一个轻量级、高性能的JavaScript库,它简化了DOM操作、事件处理以及AJAX交互。在JQuery中,我们可以通过多种方法来发起Ajax...

    Struts2 与Jquery Ajax的json数据交换的典型范例

    在Struts2与jQuery的Ajax交互中,JSON扮演着数据载体的角色,可以高效地传输数据。 **2. Struts2 JSON插件** 为了支持JSON数据交换,Struts2提供了一个JSON插件。首先,需要在项目中添加该插件的依赖,并在struts....

    JQuery发起ajax请求Struts2,并操作JSON数据的例子

    在Web开发中,jQuery、Ajax、Struts2和JSON是常用的技术栈,它们结合使用能够构建动态、交互式的网页应用。下面将详细讲解这些技术及其在"JQuery发起ajax请求Struts2,并操作JSON数据的例子"中的应用。 **jQuery** ...

    JQuery发送Ajax请求Struts2,并返回JSON的例子

    在Web开发中,jQuery、Struts2、Ajax和JSON是常见的技术组合,它们协同工作以实现动态、异步的数据交互。本示例将探讨如何利用jQuery的Ajax功能向Struts2框架发送请求,并以JSON格式接收响应数据。下面我们将详细...

    整合jquery+json+struts2异步提交实例

    在这个实例中,“整合jquery+json+struts2异步提交”是一个典型的前端与后端交互的示例,利用了jQuery的Ajax功能和Struts2框架处理JSON数据。下面我们将详细探讨这些技术及其相互配合的工作原理。 **jQuery** 是一...

    jquery+struts2实现异步刷新实例

    在现代Web开发中,异步刷新(Ajax)技术已经成为一种不可或缺的交互方式,它使得页面无需完全刷新就能更新部分数据,提升用户体验。本实例将详细讲解如何利用jQuery库与Struts2框架结合,实现异步刷新功能。jQuery以...

    Struts2之struts2自带插件实现异步调用案例struts015

    在本案例"Struts2之struts2自带插件实现异步调用案例struts015"中,我们将探讨如何利用Struts2的插件机制和AJAX技术来实现异步数据交互。 首先,我们要了解AJAX(Asynchronous JavaScript and XML)的核心概念,它...

    Jquery与struts2

    在成功回调中,jQuery会接收到Struts2返回的JSON数据,可以进一步处理。例如,更新DOM: ```javascript success: function(response) { var data = JSON.parse(response); // 更新DOM $('#someElement').text...

    AJAX和struts2传递JSON数组

    在本场景中,我们将探讨如何使用AJAX来传递JSON数组,并在Struts2的Action中接收和处理这些数据。 首先,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析...

    Struts2 ajax json使用介绍

    在Struts2中,我们可以利用Ajax和JSON来实现数据的异步交互。 **一、引入所需库** 首先,为了在Struts2中使用Ajax和JSON,我们需要引入以下库: 1. Struts2的核心库:`struts2-core.jar` 2. Struts2的JSON插件:`...

    Struts+Jquery+Ajax+Json应用实例

    Struts、jQuery、Ajax以及JSON是Web开发中的四个关键技术,它们在构建动态、交互式的Web应用程序中发挥着重要作用。下面将分别介绍这些技术的核心概念及其在实际应用中的结合使用。 **Struts框架**:Struts是Apache...

    jQuery与Struts2 在ajax 上的结合

    总的来说,jQuery与Struts2在Ajax上的结合是现代Web开发中的常见实践,它极大地提高了Web应用的交互性和效率。通过理解这些组件的工作原理和它们之间的交互方式,开发者能够构建出更高效、更灵活的Web应用程序。

    struts2实现ajax功能所需的jar包

    5. **dojo或jQuery库**:虽然不是Struts2的官方组件,但在实现AJAX交互时,前端通常会使用这些JavaScript库。Dojo或jQuery简化了AJAX请求的编写,并提供了丰富的DOM操作功能,便于更新页面内容。 在实际开发中,...

    json2+jsonplugin struts2整合ajax时,使用json时需要的jar包

    在Struts2框架中整合Ajax以实现异步数据交互,JSON(JavaScript Object Notation)扮演了关键角色。JSON是一种轻量级的数据交换格式,它允许Web应用与服务器之间高效地传输数据,而无需进行繁琐的HTTP请求。在这个...

    Struts2_jquery_json1.0.zip_Struts2 heloword_struts2_struts2 jque

    总结来说,"Struts2_jquery_json1.0.zip"是一个综合实例,展示了如何在Struts2框架中结合使用jQuery和JSON进行异步数据交互。通过学习这个实例,开发者可以更好地理解如何在Java后端与JavaScript前端之间有效地传递...

    ajax利用json在struts2.0中的使用

    通过在后台Action中处理业务逻辑并返回JSON数据,前端JavaScript通过Ajax异步请求获取这些数据并更新界面,从而实现了无刷新的页面交互。这不仅提升了用户体验,也使得后端和前端的解耦更加明显,便于代码维护。

    struts2实现ajax

    在Struts2中实现Ajax(Asynchronous JavaScript and XML)可以极大地提升Web应用的用户体验,因为它允许部分页面动态更新,而无需整个页面刷新。以下是对Struts2实现Ajax的详细解释: 1. **Ajax基础**: Ajax的...

Global site tag (gtag.js) - Google Analytics