一、加入与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>