Struts2 返回JSON数据方法(一)使用json-default
今天写AJAX动态判断登陆用户名密码,查资料鼓捣了一天返回JSON数据的问题,终于弄好了。
JSON建构于两种结构:
1.“名称/值”对的集合。不同的语言中,它被理解为对象(object),纪录(record),结构
(struct),字典(dictionary),哈希表(hashtable),有键列表(keyedlist),或者关联数组
(associativearray)。
2.值的有序列表。在大部分语言中,它被理解为数组(array)。这些都是常见的数据结构。JSON形式事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。(JSON弄明白了还是有好处啊。)
JSON具有以下这些形式:
1.
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘JSON形
式名称/值’对”之间使用“,”(逗号)分隔。例:{"name":"张三","age":20,"birthday":"1982-07-20"}
这是对象在json中的表示形式.即{"key1":"value1","key2":"value2",...}
2.数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。例:["张三","李四","王五"]这是数组在json中的表示形式.即[value1,value2,value3,....]
我用的是名称/值 的形式
首先是用struts2自带的处理方法。 这需要引入几个JAR
我的是struts2.3.7的
struts2-json-plugin-2.3.4.1.jar
commons-logging-1.1.1.jar
json-lib-2.3-jdk15.jar
以下是Action的代码
public class LoginAction extends ActionSuppor{
//将要被Struts2序列化为JSON字符串的对象
Map<String, Object> message;
public Map<String, Object> getMessage() {
return message;
}
public void setMessage(Map<String, Object> message) {
this.message = message;
}
//验证登陆
public String loginTch() {
message = new HashMap<String, Object>();
// message中的数据将会被Struts2转换成JSON字符串,所以这里要先清空其中的数据(本来就没数据啊,-,-不知道有没有必要)
message.clear();
message.put("loginError", "密码错误!");
}
return SUCCESS;
}
下面是struts.xml里面的配置
<struts>
<!-- 注意:这里是json-default,json-default是struts-default的子类 -->
<package name="default" namespace="/" extends="json-default">
<action name="loginAction" class="com.action.LoginAction" method="loginTch">
<result name="success" type="json">
<!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 -->
<param name="root">message</param>
</result>
</action>
</package>
</struts>
OK jsp代码
<!-- 用于显示消息 -->
<head>
<script src="js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
function doSubmit() {
$.ajax({
type: "GET",
url: "loginAction",
dataType: "json",
cache: false,
success: function(data) {
$.each(data, function(key, val) {
if (key == "loginError" && val != ''){
$("#mes").html(val);
return false;
}
});
}
});
}
</script>
</head>
<body>
<div id="mes">
</div>
<button type="button" onlick="doSubmit()">提交</button>
</body>