`
wjjbfq
  • 浏览: 82116 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2,AJAX,json-plugin使用

阅读更多

代码请参照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>  
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");
			}
		});
		
	};

 

注意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>  
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;
	}
}

 

在上面代码中,使用了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>  
<?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" class="com.jun.demos.struts2json.HelloWorld">
			<result type="json" />
		</action>
		<action name="listIndexRecord" class="com.jun.demos.book.action.CrudMsgAction">
			<result type="json" />
		</action>
		<action name="listAllRecord" class="com.jun.demos.book.action.CrudMsgAction" method="listAllRecord">
			<result type="json" />
		</action>
		<action name="listAllRecordByPage" class="com.jun.demos.book.action.CrudMsgAction" method="listAllRecordByPage">
			<result type="json" />
		</action>
		<action name="insertRecord" class="com.jun.demos.book.action.CrudMsgAction" method="insertRecord">
			<result type="json" />
		</action>
		<action name="removeRecordById" class="com.jun.demos.book.action.CrudMsgAction" method="removeRecordById">
			<result type="json" />
		</action>
		<action name="getPageIndex" class="com.jun.demos.book.action.CrudMsgAction" method="getPageSize">
			<result type="json" />
		</action>
		
	</package>
</struts>

 配置该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.JSONExceptioncom.googlecode.jsonplugin.JSONExceptioncom.googlecode.jsonplugin.JSONExceptioncom.googlecode.jsonplugin.JSONExceptioncom.googlecode.jsonplugin.JSONExceptioncom.googlecode.jsonplugin.JSONException: java.lang.reflect.InvocationTargetException:   
  2.   
  3. com.google.apphosting.utils.jetty.JettyLogger warn  
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,也就是提供了gettersetter

sturts-plugin是通过getterXxxXxx属性串行化输出JSON到客户端,

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

就是@JSON(Serialize=false)

 

代码如:

   

   

Java代码 复制代码
  1. @JSON(serialize=false)   
  2.   
  3.     public RecordService getRecordService() {   
  4.   
  5.        return recordService;   
  6.   
  7.     }  
@JSON(serialize=false)

    public RecordService getRecordService() {

       return recordService;

    }

 

 

分享到:
评论

相关推荐

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    `struts2-json-plugin-2.1.8.1.jar` 则是Struts 2框架的一个插件,主要用于增强Struts 2对JSON的支持。Struts 2是一款非常流行的MVC(Model-View-Controller)框架,用于构建企业级的Java Web应用程序。这个插件允许...

    struts2-json-plugin-2.3.8.jar

    在实际开发中,为了使用这个插件,你需要将`struts2-json-plugin-2.3.8.jar`文件放入项目的类路径(classpath)下,然后在Struts2的配置文件(通常为struts.xml)中启用JSON插件。在Action类中,定义返回JSON数据的...

    struts2 相关jar包 包含json-lib-2.1.jar+struts2-json-plugin-2.1.8.1.jar

    这个压缩包包含了两个关键的组件:json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar,它们是Struts2支持JSON(JavaScript Object Notation)序列化和反序列化的关键。 1. **json-lib-2.1.jar**: JSON是一种轻...

    struts2-json-plugin-2.2.3.jar

    ajax结合Struts2要用到的jar包

    struts-json-plugin-2.1.8.jar struts2-junit-plugin-2.1.8.jar json-lib-2.1.jar

    首先,我们来看`struts-json-plugin-2.1.8.jar`,这是Struts2的JSON插件,它允许Struts2的动作类直接返回JSON格式的数据,方便前端进行Ajax请求处理。该插件在2.1.8版本中修复了若干bug,并提供了对JSON输出的支持。...

    struts2-json-plugin-2.1.8.1.jar

    标题"struts2-json-plugin-2.1.8.1.jar"表明这是Struts2 JSON插件的一个特定版本,2.1.8.1。在软件开发中,版本号的更新通常意味着修复了已知的错误,增加了新的特性,或者提高了性能。 "JsonPlugin.tld"是Tag ...

    struts2-json-plugin-2.1.8jar包.zip

    使用Struts2 JSON Plugin,开发者可以设置Action的返回类型为"json",这样在Action执行完毕后,Struts2会自动将Action的模型驱动数据转化为JSON格式并发送到客户端。这大大简化了服务器端与客户端之间通过HTTP传递...

    Struts2-Json-Plugin 的使用.pdf

    Struts2-Json-Plugin 是一个专门为 Struts2 框架设计的插件,它使得在Struts2中处理Ajax请求并返回JSON数据变得更加简便。这个插件提供了"json"结果类型,允许Action直接被序列化为JSON格式,极大地简化了开发过程。...

    struts2-json-plugin-2.3.4.jar

    这是我目前发现的最高版本2012年08月06日

    Struts2-Json-Plugin 的使用.docx

    Struts2-Json-Plugin 是一个专门为 Struts2 框架设计的插件,它使得在Struts2中能够方便地处理JSON数据,从而更好地支持Ajax请求。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前端与后端...

    struts2-json-plugin-2.1.8.zip_Java 8_json-plugin-2.1.8

    1. **添加依赖**:首先,需要将`struts2-json-plugin-2.1.8.jar`文件添加到项目的类路径中,如果是Maven项目,需要在pom.xml中配置对应的依赖。 2. **配置Struts2核心过滤器**:在web.xml中配置Struts2的核心过滤器...

    (struts2-json-plugin-2.2.1)struts2 json-default配置中需要的jar包

    `struts2-json-plugin-2.2.1`这个版本的插件,意味着它是Struts2框架的2.2.1版本中的JSON支持。以下是这个插件正常工作所需的一些核心JAR文件: 1. **struts2-core.jar**:这是Struts2框架的基础,包含了所有核心的...

    struts-ajax-json-struts包

    在Struts中,可以使用Struts2的JSON插件(Struts2-Json-plugin)来支持JSON的序列化和反序列化,使得服务器端的Java对象可以直接转换为JSON格式,发送到客户端,然后由JavaScript解析并操作。 在Struts-AJAX-JSON-...

    struts-2.5.20-all(含struts2-json-plugin.jar)jar资源

    总结来说,"struts-2.5.20-all"压缩包提供了完整的Struts 2框架,包括Action、Interceptor、ValueStack等核心组件,而`struts2-json-plugin.jar`则增强了Struts 2对JSON数据的支持,使得开发基于JSON的Web应用更加...

    Struts2(json-plugin) + Spring2 + ExtJS2.2 开源网络硬盘系统

    【标题】"Struts2(json-plugin) + Spring2 + ExtJS2.2 开源网络硬盘系统"是一个基于Java技术栈的开源项目,它利用了Struts2框架的json-plugin插件,Spring2作为服务层管理和依赖注入框架,以及ExtJS2.2作为前端展示...

    struts2-json-plugin-2.3.15.1.jar

    struts2-core-2.xx 升级为struts2-core-2.3.15.1.jar后 jsonplugin-0.32.jar需要升级为 struts2-core-2.3.15.1.jar,不然在使用ajax时候报错 java.lang.NullPointerException at org.apache.jsp.web.error_jsp._jsp...

    jsonplugin,struts2-json-plugin,js

    3. `struts2-json-plugin-2.1.8.1.jar`:这是另一个版本的Struts2 JSON插件,版本号为2.1.8.1。与`jsonplugin-0.34.jar`类似,它提供了对JSON的支持,但可能包含了更多的特性、改进或修复了某些已知问题。不同版本的...

    struts-2.5所有jar包

    3. **struts2-json-plugin**: 提供了对JSON格式数据的支持,使得Action可以直接返回JSON响应,便于AJAX和API开发。 4. **struts2-dojo-plugin**: 提供了与Dojo JavaScript库的集成,方便创建富客户端界面。 5. **...

    struts2所需的包和Struts2_json所需包

    在实际开发中,为了测试Struts2返回JSON格式的数据,可以创建一个简单的Action,设置返回值,并在前端使用AJAX请求来接收这个JSON数据。例如,使用jQuery的$.ajax()方法进行请求,然后通过JSON.parse()解析返回的...

Global site tag (gtag.js) - Google Analytics