现在的位置: 首页 > 综合 > 正文

Struts2,AJAX,json-plugin使用

2013年02月19日 ⁄ 综合 ⁄ 共 12589字 ⁄ 字号 评论关闭

代码请参照

http://acheron.javaeye.com/admin/blogs/402499

 

JSON

官方文档

http://www.json.org/json-zh.html

 

jQuery

官方文档

http://docs.jquery.com/Main_Page

 

Js代码
  1. <span style=

    "font-size: small;"

    >

    function

     removerecordbyid(recordid){   

  2.         $("#showallrecord table tr"

    ).each(  

  3.         function

    (){  

  4.           var

     seq=parseInt($(

    this

    ).children(

    "td"

    ).html());  

  5.           var

     thisrecord = 

    this

    ;  

  6.           if

    (seq==recordid)  

  7.             if

    (confirm(

    "您确认执行删除操作么?"

    )){  

  8.                 $.ajax({  
  9.                     type: "POST"

    ,  

  10.                     url:"removeRecordById.action"

    ,  

  11.                     dataType:"json"

    ,  

  12.                     data:{"msg.id"

    :recordid},  

  13.                     success:function

    (json){  

  14.                         if

    (json.status==4){  

  15.                             alert("删除失败,只有提交留言的ip才能删除"

    );  

  16.                         }else

    {  

  17.                             $(thisrecord).remove();  
  18. //                          alert("删除成功");  

      

  19.                         }  
  20.                     },  
  21.                     error:function

    (){  

  22.                         alert("del error"

    );  

  23.                     }  
  24.                 });  
  25.             }  
  26.         });  
  27.     }  
  28.       
  29.       
  30.         function

     getrecordbypage(page){  

  31.         $.ajax({  
  32.             type: "POST"

    ,  

  33.             url:"listAllRecordByPage.action"

    ,  

  34.             dataType:"json"

    ,  

  35.             data:{"page"

    :page},  

  36.             success:function

    (json){  

  37.                 var

     strs=

    "<table border=/"1
    /"><tr id='colattr'><td>key-id</td><td>昵称<
    /td><td>留言时间</td><td width='120'>邮箱</td><
    td width='120'>博客</td><td width='250'>留言</td><
    td>操作</td></tr>"

    ;  

  38.                 for

    (i=0;i<json.records.length;i++){  

  39.                     str="<tr id='"

    +json.records[i].id+

    "' onclick='lineclick(this);'><td>"

    +json.records[i].id+

    "</td><td>"

    +json.records[i].from+

    "</td><td>"

    +json.records[i].addDate+

    "</td><td>"

    +json.records[i].mail+

    "</td><td>"

    +json.records[i].site+

    "</td><td>"

    +json.records[i].cont+

    "</td><td><a onclick='removerecordbyid("

    +json.records[i].id+

    ");'>删除</a></td></tr>"

      

  40.                     strs=strs+str  
  41.                 }  
  42.                 strs=strs+"</table>"

      

  43.                 $("#showallrecord"

    ).html(strs);  

  44.             },  
  45.             error:function

    (){  

  46.                 alert("error"

    );  

  47.             }  
  48.         });  
  49.           
  50.     };</span>  

 

注意dataType:"json"这个参数一定不能少,否则不能正确识别

一下是Struts action代码

Java代码
  1. <span style=

    "font-size: small;"

    >

    public

     

    class

     CrudMsgAction 

    extends

     ActionSupport{  

  2.     private

     Record msg;  

  3.     private

     

    int

     index;  

  4.     private

     RecordService recordService;  

  5.     private

     List<Record> records;  

  6.     private

     

    int

     status = 

    0

    ;  

  7.     private

     

    int

     page = 

    0

    ;  

  8.       
  9.     @JSON

    (serialize=

    false

    )  

  10.     public

     RecordService getRecordService() {  

  11.         return

     recordService;  

  12.     }  
  13. //other getter and setter

      

  14.     @Override

      

  15.     public

     String execute() 

    throws

     Exception {  

  16.         return

     SUCCESS;  

  17.     }  
  18.       
  19.     /**

     

  20.      * 返回所有记录的JSON数据

     

  21.      * @return list . All of the record.

     

  22.      * @throws Exception

     

  23.      */

       

  24.     public

     String listAllRecord() 

    throws

     Exception{  

  25.         List<Record> list = recordService.listAllRecord();  
  26. //      List list = Arrays.asList(allRecord);

      

  27. //      List<Record> list2 = (List<Record>)list;

      

  28.   
  29.         //      Record rec = (Record)list.get(0);

      

  30.         records = list;  
  31.         return

     SUCCESS;  

  32.     }  
  33.       
  34.     public

     String listAllRecordByPage() 

    throws

     Exception{  

  35.         List<Record> list = recordService.listAllRecord(page);  
  36.         records = list;  
  37.         return

     SUCCESS;  

  38.     }  
  39.       
  40.   
  41.     /**

     

  42.      * 插入记录

     

  43.      * @return update the view with AJAX when struts2 action return

     

  44.      * @throws Exception

     

  45.      */

      

  46.     public

     String insertRecord() 

    throws

     Exception{  

  47.         //插入留言日期设置

      

  48.         msg.setAddDate(new

     Date());  

  49.         //获取客户端ip,setIpaddr

      

  50.         String clientIpAddr = ServletActionContext.getRequest().getRemoteAddr();  
  51.         msg.setIpaddr(clientIpAddr);  
  52.         //判断是否为空

      

  53.         if

    (

    ""

    .equals(msg.getFrom()))msg.setFrom(

    "anonymous"

    );  

  54.         if

    (

    ""

    .equals(msg.getMail()))msg.setMail(

    "@"

    );  

  55.         if

    (

    ""

    .equals(msg.getSite()))msg.setSite(

    "-"

    );  

  56.         if

    (

    ""

    .equals(msg.getCont()))msg.setCont(

    "这家伙很懒,什么都没留下"

    );  

  57.           
  58.         recordService.insertRecord(msg);  
  59.         return

     SUCCESS;  

  60.     }  
  61.     /**

     

  62.      * 通过索引查找记录

     

  63.      * @return the field msg

     

  64.      * @throws Exception

     

  65.      */

      

  66.     public

     String listRecordByIndex() 

    throws

     Exception{  

  67.         List<Record> list = recordService.listAllRecord();  
  68.         this

    .msg = list.get(

    this

    .getIndex());  

  69.           
  70.         return

     SUCCESS;  

  71.     }  
  72.     /**

     

  73.      * 删除对应id记录

     

  74.      * @return field status. in order to update view with AJAX

     

  75.      * @throws Exception

     

  76.      */

      

  77.     public

     String removeRecordById() 

    throws

     Exception{  

  78.         String clientIpAddr = ServletActionContext.getRequest().getRemoteAddr();  
  79.         Record r = recordService.listRecordById(msg.getId());  
  80.         if

    (clientIpAddr.equals(r.getIpaddr())){  

  81.             recordService.removeRecordById(msg.getId());  
  82.             return

     SUCCESS;  

  83.         }  
  84.         status = 4

    ;  

  85.         return

     SUCCESS;  

  86.     }  
  87.       
  88.     /**

     

  89.      * 获得分页数

     

  90.      * @return pageSize using field page

     

  91.      * @throws Exception

     

  92.      */

      

  93.     public

     String getPageSize() 

    throws

     Exception{  

  94.         page = recordService.getPage();  
  95.         return

     SUCCESS;  

  96.     }  
  97. }</span>  

 

在上面代码中,使用了JSON注释@JSON(serialize=false),

除此之外,JSON注释还支持如下几个域:

name:指定Action属性被序列化成JSON对象的属性名。

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

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

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

 

Xml代码
  1. <

    span

     

    style

    =

    "font-size: small;"

    >

    <?

    xml

     

    version

    =

    "1.0"

     

    encoding

    =

    "UTF-8"

     

    ?>

      

  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">

      

  5.   
  6. <

    struts

    >

      

  7. <

    constant

     

    name

    =

    "struts.objectFactory"

     

    value

    =

    "spring"

    />

      

  8.     <

    package

     

    name

    =

    "json"

     

    extends

    =

    "json-default"

    >

      

  9.         <

    action

     

    name

    =

    "ajaxRequest"

     

    class

    =

    "com.jun.demos.struts2json.HelloWorld"

    >

      

  10.             <

    result

     

    type

    =

    "json"

     

    />

      

  11.         </

    action

    >

      

  12.         <

    action

     

    name

    =

    "listIndexRecord"

     

    class

    =

    "com.jun.demos.book.action.CrudMsgAction"

    >

      

  13.             <

    result

     

    type

    =

    "json"

     

    />

      

  14.         </

    action

    >

      

  15.         <

    action

     

    name

    =

    "listAllRecord"

     

    class

    =

    "com.jun.demos.book.action.CrudMsgAction"

     

    method

    =

    "listAllRecord"

    >

      

  16.             <

    result

     

    type

    =

    "json"

     

    />

      

  17.         </

    action

    >

      

  18.         <

    action

     

    name

    =

    "listAllRecordByPage"

     

    class

    =

    "com.jun.demos.book.action.CrudMsgAction"

     

    method

    =

    "listAllRecordByPage"

    >

      

  19.             <

    result

     

    type

    =

    "json"

     

    />

      

  20.         </

    action

    >

      

  21.         <

    action

     

    name

    =

    "insertRecord"

     

    class

    =

    "com.jun.demos.book.action.CrudMsgAction"

     

    method

    =

    "insertRecord"

    >

      

  22.             <

    result

     

    type

    =

    "json"

     

    />

      

  23.         </

    action

    >

      

  24.         <

    action

     

    name

    =

    "removeRecordById"

     

    class

    =

    "com.jun.demos.book.action.CrudMsgAction"

     

    method

    =

    "removeRecordById"

    >

      

  25.             <

    result

     

    type

    =

    "json"

     

    />

      

  26.         </

    action

    >

      

  27.         <

    action

     

    name

    =

    "getPageIndex"

     

    class

    =

    "com.jun.demos.book.action.CrudMsgAction"

     

    method

    =

    "getPageSize"

    >

      

  28.             <

    result

     

    type

    =

    "json"

     

    />

      

  29.         </

    action

    >

      

  30.           
  31.     </

    package

    >

      

  32. </

    struts

    >

    </

    span

    >

      

 配置该Action与配置普通Action存在小小的区别。

包继承了json-default包,而不再继承默认的default包,这是因为只有在该包下才有json类型的Result。

result可以使用

<param name="excludeProperties">page,index</param>

排除

Action

这些都不返回的属性.

结合action中属性getter方法注解@JSON(serialize=false)灵活配置

 

异常解决:

 

Xml代码
  1. Nested in javax.servlet.ServletException: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: java.lang.reflect.InvocationTargetException:  

  2.   
  3. com.google.apphosting.utils.jetty.JettyLogger warn  

 

这里下面有

4-5

页的异常信息,就不贴出来了

 

解决方法:

出现这个问题是某属性通过串行化

json

数据异常,

因为使用的

spring

注入属性

recordService

,也就是提供了

getter

setter

sturts-plugin

是通过

getterXxx

Xxx

属性串行化输出

JSON

到客户端,

所以解决这个异常方法就是在不需要串行化的属性的

getter

前加上

annotation

就是

@JSON(Serialize=false)

 

代码如:

   

   

Java代码
  1. @JSON

    (serialize=

    false

    )  

  2.   
  3.     public

     RecordService getRecordService() {  

  4.   
  5.        return

     recordService;  

  6.   
  7.     } 

抱歉!评论已关闭.