`

《研磨struts2》第十四章 对Ajax的支持 之 14.4 使用JSON插件

 
阅读更多

14.4  使用JSON插件

14.4.1 JSON基础

JSON(JavaScript Object Natation),它是一种轻量级、基于文本、语言无关的数据交换格式,类似于XML,是一种结构化数据串行化的文本格式,常常用于服务器与JavaScript之间的数据交换上。

       JSON是从ECMAScript语言标准衍生而来的,定义了一套简单的格式化规则,JSON可以描述四种简单的类型,包括字符串、数字、布尔值及和null;还可以描述两种结构化类型,包括对象和数组。

       当然,更多JSON具体的语法不是这里关注的重点,有需要的朋友请参见http://json.org/,在那里可以获取更多的JSON的知识。

14.4.2 JSON插件

为了更容易使用JSON,Struts2提供了JSON插件,这个插件提供了名为“json”的ResultType,如果设置某个Result的类型为json,那么JSON插件会把这个Action对象序列化成为一个json格式的字符串,然后再向客户端返回这个字符串。

       要使用JSON插件,只需要把struts2-json-plugin-2.1.8.1.jar文件拷贝到WEB-INF/lib里面即可。

       JSON插件提供了一些参数,供大家在有需要的时候选用,可以通过他们实现更精确的控制,基本的参数罗列如下:

  • excludeProperties:输出结果需要去除的属性值,支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式。如下示例代码就表示,user属性里面的password属性不会被序列化输出,代码如下:

 

java代码:
  1. <result type="json">  
  2.   <param name="excludeProperties">  
  3.     user.password  
  4.   </param>  
  5. </result>  

includeProperties:输出结果中需要包含的属性值,支持正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。如下示例就表示输出user的所有属性,代码如下:

 

java代码:
  1. <result type="json">  
  2.   <param name="includeProperties">  
  3.     user.*  
  4.   </param>  
  5. </result>  

root:根据ognl表达式取出你需要输出的结果的根对象,如下示例就表示输出user的name属性的值,代码如下:

 

java代码:
  1. <result type="json">  
  2.   <param name="includeProperties">  
  3.     user.name  
  4.   </param>  
  5. </result>  
  • excludeNullProperties:表示是否去掉空值, 默认值是false,如果设置为true会自动将为空的值过滤,只输出不为空的值
  • ignoreHierarchy:表示是否忽略继承关系,默认值是true,也就是在输出的时候不会自动把父级对象序列化并输出。

当然,JSON插件还有很多的参数,这里就不去一一罗列了,有兴趣的朋友请参见https://cwiki.apache.org/confluence/display/WW/JSON%20Plugin,哪里有详尽的参数说明。

14.4.3使用JSON插件来实现Ajax

       沿用前面演示Ajax的示例,实现最常见的输入校验的功能,通过Ajax来判断输入的ID是否重复,并给出相应的提示信息。

(1)Action的写法跟以前差不多,示例代码如下:

 

java代码:
  1. public class AjaxAction extends ActionSupport {  
  2.     private String account;  
  3.     private String password;  
  4.     private String msg;  
  5.       
  6.     public String getAccount() {  
  7.         return account;  
  8.     }  
  9.     public void setAccount(String account) {  
  10.         this.account = account;  
  11.     }  
  12.     public String getPassword() {  
  13.         return password;  
  14.     }  
  15.     public void setPassword(String password) {  
  16.         this.password = password;  
  17.     }  
  18.     public String getMsg() {  
  19.         return msg;  
  20.     }  
  21.     public void setMsg(String msg) {  
  22.         this.msg = msg;  
  23.     }  
  24.   
  25.       
  26.     public String execute() throws Exception {  
  27.         //准备已经注册的数据,测试使用  
  28.         Set<String> set = new HashSet<String>();  
  29.         set.add("account1");  
  30.         set.add("account2");  
  31.         set.add("account3");  
  32.           
  33.         if(set.contains(account)){  
  34.             msg = "输入不正确,请重新输入";  
  35.         }else{  
  36.             msg = "输入正确";  
  37.         }         
  38.         return this.SUCCESS;  
  39.     }  
  40. }  

注意:Action的属性需要提供getter/setter方法,不能用public属性的方式进行值的对应,否则JSON插件是不会正确序列化属性值的。

(2)struts.xml的配置有一些变化,首先是不再继承struts-default,而是改为继承json-default;其次result的type要设置为json,示例代码如下:

 

java代码:
  1. <action name="ajaxAction" class="cn.javass.ajax.AjaxAction">  
  2.         <result name="success" type="json"></result>  
  3. </action>  

(3)页面也有一些变化,主要是在获取Action的返回值过后,需要通过eval方法来把json字符串造型成为一个对象,然后把这个对象中的msg属性的值设置到div中显示即可,示例代码如下:

 

java代码:
  1. <%@ page contentType="text/html; charset=gb2312"%>  
  2. <head><meta http-equiv="Content-Type" content="text/html;charset=gb2312"></head>  
  3. <script language="javascript">  
  4.     var myRequest;  
  5.     function t1(){  
  6.         //准备向后台传输的数据  
  7.         var account = document.getElementById("account").value;   
  8.         //Ajax  
  9.         myRequest = new ActiveXObject("Msxml2.XMLHTTP");  
  10.         myRequest.onreadystatechange = t2;  
  11.         myRequest.open("GET","ajaxAction.action?account="+account,true);  
  12.         myRequest.send(null);  
  13.     }     
  14.     function t2(){  
  15.         if(myRequest.readyState==4){  
  16.             var ret = myRequest.responseText;  
  17.             //把json造型成对象  
  18.             var obj = eval("("+ret+")");              
  19.             //后续处理,把对象的msg设置到div中显示出来  
  20.             document.all("myDiv").innerHTML = obj.msg;    
  21.         }  
  22.     }     
  23. </script>  
  24. <form action="" medhot="post">  
  25.     <table>  
  26.         <tr>  
  27.             <td colspan=3 align=center>新用户注册</td>  
  28.         </tr>  
  29.         <tr>  
  30.             <td>用户帐号:</td>  
  31.             <td><input type="text" id="account" name="account" onblur="t1();"><font color=red>*</font></td>  
  32.             <td><div id="myDiv"></div></td>  
  33.         </tr>  
  34.         <tr>  
  35.             <td>用户密码:</td>  
  36.             <td colspan=2><input type="password" id=""password" name="password"></td>  
  37.         </tr>  
  38.         <tr>  
  39.             <td>重复密码:</td>  
  40.             <td colspan=2><input type="password" id=""password2" name="password2"></td>  
  41.         </tr>  
  42.         <tr>  
  43.             <td colspan=3 align=center><input type="submit" value="保存注册信息"></td>  
  44.         </tr>  
  45.     </table>  
  46. </form>  

去运行看看,效果应该跟前面AJAX演示的效果是一样的。

 

私塾在线网站原创《研磨struts2》系列

转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4132.html

欢迎访问http://sishuok.com获取更多内容

8
0
分享到:
评论

相关推荐

    研磨Struts2配书视频对应的演示源代码

    这个压缩包中的“研磨Struts2配书视频对应的演示源代码”是《研磨Struts2》一书作者为了帮助读者更好地理解和实践书中理论知识而提供的实际示例代码。 首先,让我们深入理解Struts2的核心概念和技术特性: 1. **...

    研磨Struts2

    ### 知识点一:Struts2入门(MVC HelloWorld) #### 1.1 Struts2简介 ...以上就是关于“研磨Struts2”的主要知识点梳理,通过深入学习这些内容,开发者可以更好地掌握Struts2框架的核心技术和实践技巧。

    研磨struts2 高清版

    由于文件较大,我把这个文档切割为2部分,这是第一部分,请下载完第一部分后一定要下载第二部分,否则不能阅读。

    《研磨Struts 2》PDF版本下载.txt

    根据提供的文件信息,我们可以推断出这是一份关于《研磨Struts 2》书籍PDF版本的下载资源。为了更好地理解和概括这份资料所涉及的知识点,我们先来了解一下Struts 2框架及其重要性,然后深入探讨《研磨Struts 2》这...

    研磨Struts2配书视频对应的PPT

    此外,PPT可能还会涵盖Struts2的插件系统,如Tiles、FreeMarker和JSP视图技术的集成,以及如何使用Struts2与Spring、Hibernate等其他框架进行整合,实现松耦合的企业级应用。Struts2的国际化和本地化支持也是重要的...

    研磨Struts2 高清完整版.part2

    研磨Struts2 高清完整版,请和第一部分一起下载啊

    研磨struts

    此外,Struts2还提供了对JSP、FreeMarker等视图技术的支持。 4. **HelloWorld示例**:这是学习任何新框架的第一步。书中详细介绍了如何创建一个简单的Struts2应用,从Servlet+JSP+JavaBean实现MVC模式,然后逐步...

    研磨Struts2_12859679_高清完整版.part2.rar

    研磨Struts2_12859679_高清完整版

    研磨Struts2-高清-完整目录-2011年10月

    研磨Struts2-高清-完整目录-2011年10月,分享给所有需要的人

    研磨设计模式(完整带书签).part2.pdf

    第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式...

    研磨设计模式-part2

    第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式...

    研磨设计模式(完整带书签).part1.pdf

    第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式...

    研磨设计模式.part2(共4个)

    第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元...

    研磨设计模式.part2

    研磨设计模式.part2 一定要下载5部分

Global site tag (gtag.js) - Google Analytics