1 struts2返回json有两种方式。第一种是通过response的printWriter的write方法。第二种是通过struts2的json技术。
2 struts2的返回json技术。需要满足下面几个条件:
a:前台页面通过ajax请求,请求路径为action的路径。
如:<link rel="stylesheet" type="text/css" href="<%=basePath %>common/jquery/jquery-easyui-1.3.2/themes/icon.css">
<link rel="stylesheet" type="text/css" href="<%=basePath %>common/jquery/jquery-easyui-1.3.2/themes/default/easyui.css">
<script type="text/javascript" language="javascript" src="<%=basePath %>common/jquery/jquery-easyui-1.3.2/jquery-1.8.0.min.js"></script>
<script type="text/javascript" language="javascript" src="<%=basePath %>common/jquery/jquery-easyui-1.3.2/jquery.easyui.min.js"></script>
js中的ajax:
function test_btn_test_ajax(){
var url="http://localhost:8080/test20150411/testAjax!ajax";
$.ajax({
url:url,
type:"post",
dateType:"json",
success:function(data){
alert(JSON.stringify(data));
}
})
}
b:在struts2的配置文件中。action所对应的package标签 必须继承json-default。同时action的result的type值必须为json
如:<package name="testAjax" namespace="/" extends="json-default">
<action name="testAjax" class="exampleAjaxAction">
<result type="json"></result>
</action>
</package>
c:在所对应的类中,默认的是返回所有的get开头的方法。同时对应的action类的处理方法必须返回success字符串。
如:public String ajax(){
map.put("name","xcl");
map.put("password","123456");
System.out.println("设置了map");
return "success";//struts2的返回的json的技术,函数返回值一定要是success
}
//默认的get开头的方法都作为struts2的返回json的内容。
public Map getMap(){
return map;
}
注意:如果有的get方法不想被struts2作为返回json。可以在方法上添加json注解。
如:
//添加json注解:serialize=false表示该get方法不作为struts2返回json 默认情况下,凡是get开头的方法都作为struts2返回json的方法
@JSON(serialize=false)
public String getAaa() {
return aaa;
}
以上是struts2返回json的说明。
总结:1 前台通过ajax来发出请求。
2 后台的struts2配置文件中package标签必须继承json-default,同时action标签的result标签的type值为json
3 对应的action的类中的方法必须返回success字符串。默认情况下是所有get开头的方法都作为struts2返回json。如果不想被struts2作为返回json的方法。可以在方法上添加json注解:@JSON(serialize=false)
完整的例子:
jsp:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ 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>My JSP 'index.jsp' starting page</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">
<script type="text/javascript" language="javascript" src="<%=basePath %>common/WDatePicker/WdatePicker.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<link rel="stylesheet" type="text/css" href="<%=basePath %>common/jquery/jquery-easyui-1.3.2/themes/icon.css">
<link rel="stylesheet" type="text/css" href="<%=basePath %>common/jquery/jquery-easyui-1.3.2/themes/default/easyui.css">
<script type="text/javascript" language="javascript" src="<%=basePath %>common/jquery/jquery-easyui-1.3.2/jquery-1.8.0.min.js"></script>
<script type="text/javascript" language="javascript" src="<%=basePath %>common/jquery/jquery-easyui-1.3.2/jquery.easyui.min.js"></script>
<script type="text/javascript" language="javascript" src="<%=basePath %>common/json2.js"></script>
<style type="text/css">
.table_css{
border:#666666 solid 1px;
border-color:#666666 solid 1px;
}
.table_css tr{
border:#666666 solid 1px;
border-color:#666666 solid 1px;
}
.table_css tr td{
border:#666666 solid 1px;
border-color:#666666 solid 1px;
}
</style>
</head>
<body>
<fieldset>
<legend><s:property value="@com.util.Lan@getString('chaxun')"/></legend>
<form name="form1" action="exampleQuery!list" method="post">
<table>
<tr>
<input type="button" name="btn_testAjax" id="btn_testAjax" value="测试" οnclick="test_btn_test_ajax()"/>
</tr>
</table>
</form>
</fieldset>
</table>
</body>
<script type="text/javascript" language="javascript">
function test_btn_test_ajax(){
var url="http://localhost:8080/test20150411/testAjax!ajax";
$.ajax({
url:url,
type:"post",
dateType:"json",
success:function(data){
alert(JSON.stringify(data));
}
})
}
</script>
</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.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<constant name="struts.objectFactory" value="spring"/>
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
<package name="testAjax" namespace="/" extends="json-default">
<action name="testAjax" class="exampleAjaxAction">
<result type="json"></result>
</action>
</package>
<!--<include file="./struts_web_common.xml"></include>-->
</struts>
后台类:
package com.example.action;
import java.util.HashMap;
import java.util.Map;
import org.apache.struts2.json.annotations.JSON;
import com.opensymphony.xwork2.ActionSupport;
public class ExampleAjaxAction extends ActionSupport{
private Map map=new HashMap();
private String aaa="";
public ExampleAjaxAction() {
super();
// TODO Auto-generated constructor stub
}
public Map getMap(){
return map;
}
public String ajax(){
map.put("name","xcl");
map.put("password","123456");
System.out.println("设置了map");
return "success";//struts2的返回的json的技术,函数返回值一定要是success
}
//添加json注解:serialize=false表示该get方法不作为struts2返回json 默认情况下,凡是get开头的方法都作为struts2返回json的方法
@JSON(serialize=false)
public String getAaa() {
return aaa;
}
public void setAaa(String aaa) {
this.aaa = aaa;
}
}
2 struts2的返回json技术。需要满足下面几个条件:
a:前台页面通过ajax请求,请求路径为action的路径。
如:<link rel="stylesheet" type="text/css" href="<%=basePath %>common/jquery/jquery-easyui-1.3.2/themes/icon.css">
<link rel="stylesheet" type="text/css" href="<%=basePath %>common/jquery/jquery-easyui-1.3.2/themes/default/easyui.css">
<script type="text/javascript" language="javascript" src="<%=basePath %>common/jquery/jquery-easyui-1.3.2/jquery-1.8.0.min.js"></script>
<script type="text/javascript" language="javascript" src="<%=basePath %>common/jquery/jquery-easyui-1.3.2/jquery.easyui.min.js"></script>
js中的ajax:
function test_btn_test_ajax(){
var url="http://localhost:8080/test20150411/testAjax!ajax";
$.ajax({
url:url,
type:"post",
dateType:"json",
success:function(data){
alert(JSON.stringify(data));
}
})
}
b:在struts2的配置文件中。action所对应的package标签 必须继承json-default。同时action的result的type值必须为json
如:<package name="testAjax" namespace="/" extends="json-default">
<action name="testAjax" class="exampleAjaxAction">
<result type="json"></result>
</action>
</package>
c:在所对应的类中,默认的是返回所有的get开头的方法。同时对应的action类的处理方法必须返回success字符串。
如:public String ajax(){
map.put("name","xcl");
map.put("password","123456");
System.out.println("设置了map");
return "success";//struts2的返回的json的技术,函数返回值一定要是success
}
//默认的get开头的方法都作为struts2的返回json的内容。
public Map getMap(){
return map;
}
注意:如果有的get方法不想被struts2作为返回json。可以在方法上添加json注解。
如:
//添加json注解:serialize=false表示该get方法不作为struts2返回json 默认情况下,凡是get开头的方法都作为struts2返回json的方法
@JSON(serialize=false)
public String getAaa() {
return aaa;
}
以上是struts2返回json的说明。
总结:1 前台通过ajax来发出请求。
2 后台的struts2配置文件中package标签必须继承json-default,同时action标签的result标签的type值为json
3 对应的action的类中的方法必须返回success字符串。默认情况下是所有get开头的方法都作为struts2返回json。如果不想被struts2作为返回json的方法。可以在方法上添加json注解:@JSON(serialize=false)
完整的例子:
jsp:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ 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>My JSP 'index.jsp' starting page</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">
<script type="text/javascript" language="javascript" src="<%=basePath %>common/WDatePicker/WdatePicker.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<link rel="stylesheet" type="text/css" href="<%=basePath %>common/jquery/jquery-easyui-1.3.2/themes/icon.css">
<link rel="stylesheet" type="text/css" href="<%=basePath %>common/jquery/jquery-easyui-1.3.2/themes/default/easyui.css">
<script type="text/javascript" language="javascript" src="<%=basePath %>common/jquery/jquery-easyui-1.3.2/jquery-1.8.0.min.js"></script>
<script type="text/javascript" language="javascript" src="<%=basePath %>common/jquery/jquery-easyui-1.3.2/jquery.easyui.min.js"></script>
<script type="text/javascript" language="javascript" src="<%=basePath %>common/json2.js"></script>
<style type="text/css">
.table_css{
border:#666666 solid 1px;
border-color:#666666 solid 1px;
}
.table_css tr{
border:#666666 solid 1px;
border-color:#666666 solid 1px;
}
.table_css tr td{
border:#666666 solid 1px;
border-color:#666666 solid 1px;
}
</style>
</head>
<body>
<fieldset>
<legend><s:property value="@com.util.Lan@getString('chaxun')"/></legend>
<form name="form1" action="exampleQuery!list" method="post">
<table>
<tr>
<input type="button" name="btn_testAjax" id="btn_testAjax" value="测试" οnclick="test_btn_test_ajax()"/>
</tr>
</table>
</form>
</fieldset>
</table>
</body>
<script type="text/javascript" language="javascript">
function test_btn_test_ajax(){
var url="http://localhost:8080/test20150411/testAjax!ajax";
$.ajax({
url:url,
type:"post",
dateType:"json",
success:function(data){
alert(JSON.stringify(data));
}
})
}
</script>
</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.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<constant name="struts.objectFactory" value="spring"/>
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
<package name="testAjax" namespace="/" extends="json-default">
<action name="testAjax" class="exampleAjaxAction">
<result type="json"></result>
</action>
</package>
<!--<include file="./struts_web_common.xml"></include>-->
</struts>
后台类:
package com.example.action;
import java.util.HashMap;
import java.util.Map;
import org.apache.struts2.json.annotations.JSON;
import com.opensymphony.xwork2.ActionSupport;
public class ExampleAjaxAction extends ActionSupport{
private Map map=new HashMap();
private String aaa="";
public ExampleAjaxAction() {
super();
// TODO Auto-generated constructor stub
}
public Map getMap(){
return map;
}
public String ajax(){
map.put("name","xcl");
map.put("password","123456");
System.out.println("设置了map");
return "success";//struts2的返回的json的技术,函数返回值一定要是success
}
//添加json注解:serialize=false表示该get方法不作为struts2返回json 默认情况下,凡是get开头的方法都作为struts2返回json的方法
@JSON(serialize=false)
public String getAaa() {
return aaa;
}
public void setAaa(String aaa) {
this.aaa = aaa;
}
}