AJax技术

【Struts2】Struts2学习(8) Ajax与Json(2)

字号+ 作者:H5之家 来源:H5之家 2017-06-29 08:00 我要评论( )

var p = {“name”:’yas’,”sex”:’male’};alert(p);使用JSON语法创建JavaScript对象时,属性不仅可以是普通字符串,也可以是任何基本数据类型,还可以是函数、数组,甚至是灵位一个JSON语法创建的对象。 perso

var p = {“name”:’yas’,”sex”:’male’}; alert(p); 使用JSON语法创建JavaScript对象时,属性值不仅可以是普通字符串,也可以是任何基本数据类型,还可以是函数、数组,甚至是灵位一个JSON语法创建的对象。

person= { name:’yee’, sex:’female’, son:{ name:’non’, grade:1 }, info: function(){ document.writeln(“姓名:”+this.name + “性别:”+this.sex); } }

使用Json语法创建数组

在早期JavaScript语法里,通过如下方式创建数组

//创建数组对象 var a = new Array(); //为数组元素赋值 a[0]=’yee’; a[1]=’non’; //或者这种方式 var a = new Array(‘yee’,’non’); 使用JSON语法创建数组

var a = [‘yee’,’non’];Action类代码

public class JSONExample { //模拟处理结果的属性 private int[] ints = {10, 20}; private Map<String , String> map = new HashMap<String , String>(); private String customName = "顾客"; //封装请求参数的三个属性 private String field1; //'transient'修饰的属性不会被序列化 private transient String field2; //没有setter和getter方法的字段不会被序列化 private String field3; public String execute() { map.put("name", "疯狂Java讲义"); return Action.SUCCESS; } //使用注释语法来改变该属性序列化后的属性名 @JSON(name="newName") public Map getMap() { return this.map; } //customName属性的setter和getter方法 public void setCustomName(String customName) { this.customName = customName; } public String getCustomName() { return this.customName; } //field属性的setter和getter方法 … }

上面代码使用了JSON注释,指定了name属性,name属性用于改变JSON对象的属性名字。

JSON注释还支持如下几个属性

serialize: 设置是否序列化该属性

deserialize: 设置是否反序列化该属性。

format:设置用于格式化输出、解析日期表单域格式。如”yyyy-MM-dd’T’HH:mm:ss”


JSON插件提供了一种json类型的Result,如果为某个Action指定了一个类型为json的Result,则该Result无需映射到任何视图资源。JSon插件会负责将Action里的状态信息序列化成JSON格式的字符串,并将该字符串返回给客户端。这里需要用到struts2-json-plugin-2.2.1.jar

配置struts.xml

<constant name="struts.i18n.encoding" value="UTF-8"/> <package name="example" extends="json-default"> <action name="JSONExample" class="org.crazyit.app.action.JSONExample"> <!-- 配置类型的json的Result --> <result type="json"> <!-- 为该Result指定参数 --> <param name="noCache">true</param> <param name="contentType">text/html</param> <!-- 设置只序列Action的map属性 --> <!-- param name="root">map</param --> </result> </action> <action name="*"> <result>/WEB-INF/content/{1}.jsp</result> </action> </package>

注意编码格式需要为UTF-8,因为Ajax的POST请求都是以UTF-8编码的。

配置包时,要继承json-defalut包,只有在该包下才有json类型的Result。

 

配置json类型的Result时,可以指定如下常用参数。

参数名

合法值

默认值

说明

excludeProperties

逗号隔开多个属性名的表达式

 

所有匹配其中任意一个属性名表达式的属性都不会被序列化到JSON字符串中

IncludeProperties

逗号隔开的多个属性名表达式

 

所有匹配其中任意一个属性名表达式的属性都会被序列化到JSON字符串中

root

OGNL表达式,确定Action内某个属性

 

设置该参数将不再把整个Action对象序列化成JSON字符串。而是只将该参数所指定的Action属性序列化成JSON字符串

wrapPrefix

任意字符串

 

Json结果字符串添加前缀

wrapSuffix

任意字符串

 

Json结果字符串添加后缀

ignoreHierarchy

true或false

true

默认情况下,JSON插件只序列化Action对象的本身的属性,不会理会它的父类属性,将该属性设置为false,将会序列化从Object类开始、所有父类、直到该Action类中所包含的全部属性。

enableGZIP

true或false

false

设置是否对JSON响应启用gzip压缩,如果启用gzip压缩,需要浏览器支持。

noCache

true 或 false 

false

设置是否取消浏览器缓存。设置为true。 响应头将会是

Cache-Control:no-cache

Expires:0

Pragma:No-cache

excludeNullProperties

ture 或 false

false

设置是否不序列化属性值为null的属性。

contentType

合法的MIME类型

text/html

设置服务器的响应类型,默认是text/html

JSP页面

用到了一个JavaScript框架: Prototype.js 通过使用该框架,可以更加简单地访问页面中的DOM节点,实现Ajax交互,避免去创建XMLHttpRequest、发送异步请求。
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""> <html xmlns=""> <head> <title>使用JSON插件</title> <script src="${pageContext.request.contextPath}/prototype-1.6.1.js" type="text/javascript"> </script> <script type="text/javascript"> function gotClick() { //请求的地址 var url = 'JSONExample.action'; //将favorite表单域的值转换为请求参数 var params = Form.serialize('form1'); //创建Ajax.Request对象,对应于发送请求 var myAjax = new Ajax.Request( url, { //请求方式:POST method:'post', //请求参数 parameters:params, //指定回调函数 onComplete: processResponse, //是否异步发送请求 asynchronous:true }); } function processResponse(request) { //使用JSON对象将服务器响应解析成JSON对象 alert(request.responseText); var res = request.responseText.evalJSON(); alert(res); //遍历JSON对象的每个属性 for(var propName in res) { $("show").innerHTML += propName + " --> " + res[propName] + "<br/>"; } } </script> </head> <body> <s:form id="form1"> <s:textfield name="field1" label="Field 1"/> <s:textfield name="field2" label="Field 2"/> <s:textfield name="field3" label="Field 3"/> <tr><td colspan="2"> <input type="button" value="提交" onclick="gotClick();"/> </td></tr> </s:form> <div id="show"> </div> </body> </html>

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • AngularJS学习--- AngularJS中XHR(AJAX)和依赖注入(DI) step5

    AngularJS学习--- AngularJS中XHR(AJAX)和依赖注入(DI) step5

    2017-06-29 12:00

  • 前端学习笔记--AJAX的使用(二)

    前端学习笔记--AJAX的使用(二)

    2017-06-28 18:03

  • 【AJAX】AJAX技术详细解析以及实例

    【AJAX】AJAX技术详细解析以及实例

    2017-06-26 14:01

  • ajax技术的核心内容:XMLHttpRequest对象详解

    ajax技术的核心内容:XMLHttpRequest对象详解

    2017-06-26 14:00

网友点评
/