Struts2,AJAX,json-plugin使用

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

 

JSON官方文档

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

 

jQuery官方文档

http://docs.jquery.com/Main_Page

 

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代码

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 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)灵活配置

 

异常解决:

 

 

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)

 

代码如:

   

   

@JSON(serialize=false)

    public RecordService getRecordService() {

       return recordService;

    }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值