`
PerfectPlan
  • 浏览: 120999 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Struts-JSON的提高开发效率

阅读更多

 

关于Struts-JSON的提高开发效率


一、JSON是什么?

:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解

析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

 

 

二 、struts2对于JSON有什么支持?

:struts2提供了一个struts2-json-plugin.jar 用于支持JSON的使用。当我们在struts2中使用JSON的时候

必须导入struts2-json-plugin.jar

并且需要一下几点:

 

1.<package name="struts2" extends="json-default">

       //必须是继承struts2-json-plugin.jar中struts-plugin.xml文件中的定义的json-default

       /* struts2-json-plugin.jar中struts-plugin.xml配置信息:

         <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"/>                                        </interceptors>

           </package>

 

        </struts>

 

       通过配置信息我们可以知道:

          1.json-default其实是继承了struts-default的

          2.定义了一个name为json的返回类型和一个name为json的拦截器 */

 

         2.<action name="*" class="*"><result name="success" type="json"/></action>//我们需要将result

         的 返回类型定义为json

 

三、关于JSON在struts.xml中的一些属性的功能。

 

<action name="*"  class="*">
		
    <result name="success" type="json">
   <param name=""></param>//关于对JSON的一些定义
   /*excludeProperties   //代表排除Action中的哪些属性,排除多个属性时,使用逗号进行分隔(即不需要序列化的属性)
   例:<param name="excludeProperties">age</param>  排除getAge()这个方法 为什么是排除这个方法下面详解
					
      includeProperties   //代表包含Action中的哪些属性,包含多个属性是,使用逗号进行分隔(即需要序列化的属性)
   例:<param name="includeProperties">address</param>包含getAddress()这个方法 为什么是包含这个方法下面详解
					
     excludeNullProperties //代表排除Action中属性值为空的字段
   例:<param name="excludeNullProperties">true</param> 使用true/false 默认为false(即包含属性值为null的字段)
					
    root  //代表从哪里开始序列化
   例:<param name="root">person</param> person对应的可以是一个属性,也可以是一个对象,也可以是一个集合
	 //当在这里定义后,只会将person进行序列化,如果person是一个对象,则会将person对象中所有的getter方法都进行序列化
					
	注意:如果相同属性同时定义了excludeProperties和includeProperties
        那么excludeProperties的优先级要高,因此不对
	该属性进行序列化
		*/
	</result>
</action>

  四、关于JSON在Action对象中注解的使用。

:对于JSON的注解主要有一下几个属性可以定义
name:指定序列化的时候对应的名称
/*

  例:@JSON(name = "myname") 则在客户端接收到的JSON中UserName属性对应的地方为 :
                     {myname:"张三"} 以前的则是{username:"张三"}
     public String getUsername() {
return username;
     }
*/
serialize:对该方法进行序列化  true/false
/*
例:@JSON(serialize=true) 对该方法序列化,如果为false则不进行序列化
public String getUsername() {
return username;
}
*/
deserialize:不对该方法进行序列化  true/false
/*
例:@JSON(deserialize=true) 不对该方法序列化,如果为false则进行序列化
public String getUsername() {
return username;
}
*/
format:设置JSON对该方法的转换方式,一般用于对时间进行转换 
/*
例:@JSON(format="yyyy-MM-dd")  则客户端接收的JSON中date对应的值为:
                                              {date:"2011-10-2"}
public Date getDate() {
return date;
}
*/

 

五、具体的实例:

 

			Action:
				package org.viancent.action;

				import java.util.Date;
				import org.apache.struts2.json.annotations.JSON;
				import com.opensymphony.xwork2.ActionSupport;
				public class GetJsonAction extends ActionSupport {
					
					private String username;
					private String password;
					private int age;
					private Date date;

					@JSON(serialize = false)
					public String getUsername() {
						return username;
					}

					public void setUsername(String username) {
						this.username = username;
						}
					
					@JSON(name="mypassword")
					public String getPassword() {
						return password;
					}

					public void setPassword(String password) {
						this.password = password;
					}

					public int getAge() {
						return age;
					}

					public void setAge(int age) {
						this.age = age;
					}
					
					@JSON(format="yyyy-MM-dd")
					public Date getDate() {
						return date;
					}

					public void setDate(Date date) {
						this.date = date;
					}

					@Override
					public String execute() throws Exception {
						this.setDate(new Date());
						this.setAge(10);
						this.setPassword("world");
						this.setUsername("hello");
						return SUCCESS;
					}
				}

  struts.xml

				<struts>
					<package name="struts2"  extends="json-default">
					//这里一定要继承json-default
						<action name="getjsons" class="org.viancent.action.GetJsonAction">
							<result name="success"  type="json">
							//这里一定要定义type属性为json
								<param name="excludeProperties">age</param>		
							//排除getAge()方法			
							</result>
						</action>

					</package>
				</struts> 

  JSP:

				<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

				<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
				<html>
					<head>
						<script type="text/javascript" src="WEB-JS/jquery-1.5.1.js"></script>	//使用jquery一定要导入js
						
								<script type="text/javascript"> //使用jquery实现异步提交
									function getJson() {
										$.post(
											"/struts2/getjsons.action",{},function(returnedData,status)
											{
												if("success"==status)
												{
													alert(returnedData);
												}
											}
										)
									}
								</script>
					</head>
					<body id="theBody">
						<input type="button" value="GetJson" onclick="getJson();">

					</body>
				</html>

  得到的结果为:{"date":"2011-03-21","mypassword":"world"} 

//使用浏览器的bug工具查看 alert(returnedData);弹出来的只是 [object,Object]
//这里我们可以看见password的名称已经改为mypassword了 而设定那么的data属性,名称则没有变
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics