首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

Struts2,AJAX,json-plugin施用

2012-10-27 
Struts2,AJAX,json-plugin使用2009-06-05Struts2,AJAX,json-plugin使用博客分类:AJAXjsonAjaxStrutsjQuery

Struts2,AJAX,json-plugin使用
2009-06-05
Struts2,AJAX,json-plugin使用

    博客分类:
    AJAX

jsonAjaxStrutsjQuerySpring

代码请参照http://acheron.iteye.com/admin/blogs/402499



JSON官方文档

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



jQuery官方文档

http://docs.jquery.com/Main_Page


Js代码  收藏代码

    <span style="font-size: small;">function removerecordbyid(recordid){  
            $("#showallrecord table tr").each( 
            function(){ 
              var seq=parseInt($(this).children("td").html()); 
              var thisrecord = this; 
              if(seq==recordid) 
                if(confirm("您确认执行删除操作么?")){ 
                    $.ajax({ 
                        type: "POST", 
                        url:"removeRecordById.action", 
                        dataType:"json", 
                        data:{"msg.id":recordid}, 
                        success:function(json){ 
                            if(json.status==4){ 
                                alert("删除失败,只有提交留言的ip才能删除"); 
                            }else{ 
                                $(thisrecord).remove(); 
    //                          alert("删除成功");   
                            } 
                        }, 
                        error:function(){ 
                            alert("del error"); 
                        } 
                    }); 
                } 
            }); 
        } 
         
         
            function getrecordbypage(page){ 
            $.ajax({ 
                type: "POST", 
                url:"listAllRecordByPage.action", 
                dataType:"json", 
                data:{"page":page}, 
                success:function(json){ 
                    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>"; 
                    for(i=0;i<json.records.length;i++){ 
                        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>" 
                        strs=strs+str 
                    } 
                    strs=strs+"</table>" 
                    $("#showallrecord").html(strs); 
                }, 
                error:function(){ 
                    alert("error"); 
                } 
            }); 
             
        };</span> 



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

一下是Struts action代码
Java代码  收藏代码

    <span style="font-size: small;">public class CrudMsgAction extends ActionSupport{ 
        private Record msg; 
        private int index; 
        private RecordService recordService; 
        private List<Record> records; 
        private int status = 0; 
        private int page = 0; 
         
        @JSON(serialize=false) 
        public RecordService getRecordService() { 
            return recordService; 
        } 
    //other getter and setter 
        @Override 
        public String execute() throws Exception { 
            return SUCCESS; 
        } 
         
        /**
         * 返回所有记录的JSON数据
         * @return list . All of the record.
         * @throws Exception
         */  
        public String listAllRecord() throws Exception{ 
            List<Record> list = recordService.listAllRecord(); 
    //      List list = Arrays.asList(allRecord); 
    //      List<Record> list2 = (List<Record>)list; 
     
            //      Record rec = (Record)list.get(0); 
            records = list; 
            return SUCCESS; 
        } 
         
        public String listAllRecordByPage() throws Exception{ 
            List<Record> list = recordService.listAllRecord(page); 
            records = list; 
            return SUCCESS; 
        } 
         
     
        /**
         * 插入记录
         * @return update the view with AJAX when struts2 action return
         * @throws Exception
         */ 
        public String insertRecord() throws Exception{ 
            //插入留言日期设置 
            msg.setAddDate(new Date()); 
            //获取客户端ip,setIpaddr 
            String clientIpAddr = ServletActionContext.getRequest().getRemoteAddr(); 
            msg.setIpaddr(clientIpAddr); 
            //判断是否为空 
            if("".equals(msg.getFrom()))msg.setFrom("anonymous"); 
            if("".equals(msg.getMail()))msg.setMail("@"); 
            if("".equals(msg.getSite()))msg.setSite("-"); 
            if("".equals(msg.getCont()))msg.setCont("这家伙很懒,什么都没留下"); 
             
            recordService.insertRecord(msg); 
            return SUCCESS; 
        } 
        /**
         * 通过索引查找记录
         * @return the field msg
         * @throws Exception
         */ 
        public String listRecordByIndex() throws Exception{ 
            List<Record> list = recordService.listAllRecord(); 
            this.msg = list.get(this.getIndex()); 
             
            return SUCCESS; 
        } 
        /**
         * 删除对应id记录
         * @return field status. in order to update view with AJAX
         * @throws Exception
         */ 
        public String removeRecordById() throws Exception{ 
            String clientIpAddr = ServletActionContext.getRequest().getRemoteAddr(); 
            Record r = recordService.listRecordById(msg.getId()); 
            if(clientIpAddr.equals(r.getIpaddr())){ 
                recordService.removeRecordById(msg.getId()); 
                return SUCCESS; 
            } 
            status = 4; 
            return SUCCESS; 
        } 
         
        /**
         * 获得分页数
         * @return pageSize using field page
         * @throws Exception
         */ 
        public String getPageSize() throws Exception{ 
            page = recordService.getPage(); 
            return SUCCESS; 
        } 
    }</span> 



在上面代码中,使用了JSON注释@JSON(serialize=false),
除此之外,JSON注释还支持如下几个域:
name:指定Action属性被序列化成JSON对象的属性名。
serialize:设置是否序列化该属性
deserialize:设置是否反序列化该属性。
format:设置用于格式化输出、解析日期表单域的格式。例如"yyyy-MM-dd'T'HH:mm:ss"。


Xml代码  收藏代码

    <span style="font-size: small;"><?xml version="1.0" encoding="UTF-8" ?> 
    <!DOCTYPE struts PUBLIC 
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
        "http://struts.apache.org/dtds/struts-2.0.dtd"> 
     
    <struts> 
    <constant name="struts.objectFactory" value="spring"/> 
        <package name="json" extends="json-default"> 
            <action name="ajaxRequest" /> 
            </action> 
            <action name="listIndexRecord" /> 
            </action> 
            <action name="listAllRecord" method="listAllRecord"> 
                <result type="json" /> 
            </action> 
            <action name="listAllRecordByPage" method="listAllRecordByPage"> 
                <result type="json" /> 
            </action> 
            <action name="insertRecord" method="insertRecord"> 
                <result type="json" /> 
            </action> 
            <action name="removeRecordById" method="removeRecordById"> 
                <result type="json" /> 
            </action> 
            <action name="getPageIndex" method="getPageSize"> 
                <result type="json" /> 
            </action> 
             
        </package> 
    </struts></span> 

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

包继承了json-default包,而不再继承默认的default包,这是因为只有在该包下才有json类型的Result。
result可以使用<param name="excludeProperties">page,index</param>
排除Action中这些都不返回的属性.

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

异常解决:



Xml代码  收藏代码

    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: 
     
    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代码  收藏代码

    @JSON(serialize=false) 
     
        public RecordService getRecordService() { 
     
           return recordService; 
     
        } 






热点排行
Bad Request.