Ajax+Struts2实现字段验证

一、加入与Ajax的相关jar包

       commons-beanutils-1.7.0.jar   

       commons-collections-3.2.jar   

       commons-lang-2.3.jar   

       commons-logging-1.1.jar   

       ezmorph-1.0.4.jar   

       json-lib-2.2.3-jdk15.jar 

       jsonplugin-0.33.jar

      另外struts2-json-plugin-2.2.1.1.jar  和  jsonplugin-0.33.jar会冲突不能同时存在

二、Struts2的 strut.xml文件
 

    <package name="AjaxCheck" extends="struts-default,json-default">
    	<action name="ajaxCheck" class="com.trainsystem.action.AjaxCheck">
    		<result name="success" type="json"/> 
    	</action>
    </package>

注意:extends 必须继承 json-default 否则会出以下这个错

Caused by: There is no result type defined for type 'json' mapped with name 'success'.

 

三、AjaxCheck类

package com.trainsystem.action;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.trainsystem.model.Trains;
import com.trainsystem.service.TrainsService;

public class AjaxCheck extends ActionSupport {
	private HttpServletRequest request;
	private HttpServletResponse response;
	
	private String trainId;
	public HttpServletRequest getRequest() {
		return request;
	}
	public void setRequest(HttpServletRequest request) {
		this.request = request;
	}
	public HttpServletResponse getResponse() {
		return response;
	}
	public void setResponse(HttpServletResponse response) {
		this.response = response;
	}
	public String getTrainId() {
		return trainId;
	}
	public void setTrainId(String trainId) {
		this.trainId = trainId;
	}
	
	@Override
	public String execute() throws Exception {
		response = ServletActionContext.getResponse();
		response.setContentType("text/html;charset=utf-8");
		PrintWriter w = response.getWriter();
		if(trainId.equals("123")) {
			w.print("可以使用");
		}else {
			 w.print("不可以使用");
		}
		w.close();  
		return null;//不能return "success";
	}
}

 

注意:在execute 方法里面的返回值只能为 null ,若return "success" 将出错。因为 http server 发送response后就关闭了socket,这个时候再次发送response给http client就会出现问题。如果出现以下的错误就是因为这里引起的:

java.lang.IllegalStateException: Cannot call sendError() after the response has been committed

四、jsp页面
 

<script type="text/javascript">
$(document).ready(function(){   
    var inputTrainIdObj = $("#trainId");  
    inputTrainIdObj.keyup(function(){   
        var text = inputTrainIdObj.val();       
    });          
    $("#trainId").blur(function(){  
    	
        var text = inputTrainIdObj.val();  
        alert("aaa");
        $.post("ajaxCheck.action?trainId="+text,null,function(response){   
        	alert("aaa");   	
            if(response!=('可以使用')){
             document.getElementById("trainIdCheck").innerHTML="<font color='red'>"+response+"</font>";
            }else{
             document.getElementById("trainIdCheck").innerHTML="<font color='green'>"+response+"</font>";
            } 
        });   
    });          
});
</script>
   <div >
        <input type="text"  name="trainId" id="trainId">
    </div>
    <div >
        <font color="red"  id="trainIdCheck"> </font>
    </div>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值