一、Login.jsp
1、<head>引入jquery:
<script type="text/javascript"
src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.js"></script>
2、界面控件:
用戶名: <input type="text" id="userName">
<input type="button" id="btnAjax" value="Ajax調用" />
3、提交ajax請求
<script type="text/javascript">
$(function() {
$("#btnAjax").click(function() {
var userName = $("#userName").val().trim();
if (userName == '') {
alert("用戶名不能為空");
return false;
}
//login1為Action類命名空間名稱;AjaxExecute為Action方法名稱
$.ajax({
type : "post",
url : '/login1/ajaxExecute',
data : {//設置數據源
userName : userName,
password : "我是密碼"
},
dataType : "json",//設置需要返回的數據類型
success : function(d) {
alert(d.sayHi);
},
error : function(d) {
alert(d.responseText);
}
});
});
});
</script>
二、后台類:LoginActionNoNamespce
package action; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.interceptor.validation.SkipValidation; import freemarker.template.SimpleDate; @ParentPackage("json-default") @Namespace("/login1") public class LoginActionNoNamespce extends SuperActionSupport { private static final long serialVersionUID = 1L; private Map<String, String> dataMap; //會把本類所有getter方法序列化成字符串返回給jsp頁面 public Map<String, String> getDataMap() { return dataMap; } public void setDataMap(Map<String, String> dataMap) { this.dataMap = dataMap; } @SkipValidation @Action(value = "ajaxExecute", results = { @Result(type = "json", params = { "root", "dataMap" }) }) public String ajaxExecute() throws Exception { this.dataMap = new HashMap<String, String>(); // 參數名稱必須和jsp的空間名稱一一對應 String userName = request.getParameter("userName"); String password = request.getParameter("password"); dataMap.put("isSuccess", "true"); SimpleDateFormat now = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒"); dataMap.put("sayHi", "Hi:" + userName + " 當前時間為:" + now.format(new Date()) + password); return SUCCESS; } }
三、注意事項
- 類注解:@ParentPackage("json-default"),比如為json-default,不能為struts-default
json-default是繼承於structs-default的,見.m2\repository\org\apache\struts\struts2-json-plugin\2.3.16.3\struts2-json-plugin-2.3.16.3.jar\struts-plugin.xml - Action注解:@Action(value = "ajaxExecute", results = { @Result(type = "json", params = { "root", "dataMap" }) }),這里的type必須為json、root是固定值,去掉params節點會返回undefined
- 這里的dataMap定義為:private Map<String, String> dataMap;必須要添加getter、setter參數,否則返回null
- JSP頁面(這里可以用命名空間,如 url : '/login1/ajaxExecute', @ParentPackage("json-default")這樣設置就不會報錯)
- maven管理,需要引用的庫
<dependencies><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.3.16</version><exclusions><exclusion><groupId>org.javassist</groupId><artifactId>javassist</artifactId></exclusion></exclusions></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-convention-plugin</artifactId><version>2.3.16.3</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-json-plugin</artifactId><version>2.3.16.3</version></dependency><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version></dependency>