我们都知道JSON作为前后端都兼容的数据格式,被很好的用于复杂数据的传输,特别是异步提交当中。当我们要将前端的js数组提交到后端并转化为list,继而又需要将后端的list传到前端转化为js数组的时候,JSON作为中间过渡的格式,必不可少。在此详细总结下。
编程组件 Struts2, FastJson, LigerListBox, AjaxFormSubmit.
第一, 将List数据传递给前端,形成一个JS数组
首先在传到前端的Bean里增加一个menuListJson属性,传递之前把List数据转换为json字符串付给这个属性
String menuJson = JSON.toJSONString(accessProfile.getMenuList()); accessProfile.setMenuListJson(menuJson);
放入requestAttribute,以便前端JSTL能够取得该Bean
ServletActionContext.getRequest().setAttribute("profile", accessProfile);
前端页面进而可以用如下语法来把json转换为js数组
var menuList = JSON.parse(‘${profile.menuListJson}‘);
第二,将JS数组提交到后端,并转化为List对象,此处异步提交表格,使用了JQuery Form Validation插件
首先我们需要在<form></form>包裹中添加一个hidden标签, profile是struts2 action中定义的一个私有实体对象,并匹配有get,set方法,ognl会通过标签的name属性调用set方法将value值付给menuListJson属性。
<input type="hidden" id="menuList" name="profile.menuListJson" value=‘‘/>
Ajax提交部分的代码如下
$("#form1").validate({ submitHandler : function(form) { $(form).ajaxSubmit({ beforeSubmit : showRequest, success : showResponse, url : ‘<c:url value="doModify.action"/>‘, dataType : ‘json‘, type : ‘post‘, timeout : 10000 }); } });
关键点是对于接收到的json数据(代表着js数组),我们使用fastjson的parse方法转换为list
List<MenuTestBean> menuList=new ArrayList<MenuTestBean>(JSONArray.parseArray(profile.getMenuListJson(),MenuTestBean.class)); profile.setMenuList(menuList);
由此,完成了数组的前后端转换。
时间: 2024-11-05 23:28:55