Struts2学习笔记(十六)异步传输机制Json插件

前面的笔记写了下传统模式下异步传输的实现方式,可以看出还是相当麻烦的。struts2框架下,提供了json插件的方式,来方便我们进行数据的异步传输。

在lib目录下引入struts2-json-plugin-2.3.4.jar

编写JsonAction类如下所示

package cn.sict.action;

import com.opensymphony.xwork2.ActionSupport;

public class JsonAction extends ActionSupport{
	private static final long serialVersionUID = 1L;
	private String username;
	private int age;
	private String address;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		this.age=19;
		this.address="北京";
		return SUCCESS;
	}
}

可以在成员方法上进行属性的注解

配置struts.xml文件

注意将extends继承的包改为json-defalut。否则会出现unable to load configuration异常处理

<struts>
<package name="struts" extends="json-default">
<action name="jsonAction" class="cn.sict.action.JsonAction">
<result name="success" type="json"></result>
</action>
</package>
</struts>

可以通过exculdeproperties对相应的属性进行过滤,选择需要哪些属性值或不需要。比如我不需要name这个属性,可以这样配置,如果要过滤多个属性,用逗号隔开。

过滤前后


编写Jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-1.11.1.js"></script>
<script type="text/javascript">

function getInfo()
{
	$.post("jsonAction.action",{
	username:$("#username").val()
	},function(returnedData,status)
	{
		var person=returnedData;
		var username=person.username;
		var age=person.age;
		var address=person.address;
		var html="<table width='60%' border='1' align='center'> <tr><th>username</th><th>age</th><th>address</th></tr><tr><td>"+username+"</td><td>"+age+"</td><td>"+address+"</tr></table>";
		$("#theBody table:eq(0)").remove();
		$("#theBody").append(html);
	});
}
</script>
</head>
<body id="theBody">
<select id="username">
<option>zhangsan</option>
<option>lisi</option>
</select>
<input type="button" value="choose" οnclick="getInfo()">
</body>
</html>

结果


返回的Json格式的数据


分析

我们来看一下json-default包的配置详情

<struts>
    <package name="json-default" extends="struts-default">

        <result-types>
            <result-type name="json" class="org.apache.struts2.json.JSONResult"/>
        </result-types>

        <interceptors>
            <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
            <interceptor name="jsonValidation" class="org.apache.struts2.json.JSONValidationInterceptor"/>

            <!-- Sample JSON validation stack -->
            <interceptor-stack name="jsonValidationWorkflowStack">
                <interceptor-ref name="basicStack"/>
                <interceptor-ref name="validation">
                    <param name="excludeMethods">input,back,cancel</param>
                </interceptor-ref>
                <interceptor-ref name="jsonValidation"/>
                <interceptor-ref name="workflow"/>
            </interceptor-stack>

        </interceptors>

    </package>


我们可以看到json-default包继承自struts-default包,在struts-default包的基础上,添加了json的结果类型和相关的拦截器。它的处理过程是:图片来源于网络



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值