今天在公司写测试代码,由于公司用的是ssh框架做的商城项目,我想先实现下简单的增删改查,奈何没有很好的后台页面(毕竟不能测试代码直接在他的项目里改啊)
所以想到了淘淘商城中有这个后台的管理页面,打算一试,奈何struts没学好,琢磨好几小时如何把json数据回传给easyui的页面,这里还是推荐大家用谷歌
后台页面使用的是easyui,直接放其中Customer添加页面和后台action的代码吧
customer-add.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 6 8 10 109
如上述代码可见,我这里使用了ajax提交了表单之后等待后台回传个带有状态码的json数据,这样就能调用easyui页面中的ajax响应弹窗,从而完成交互
但是在网上查了好久都没找到几个靠谱的方法,要么讲的太乱……
action的代码
1 package shop.hellxz.action; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 import java.util.HashMap; 6 import java.util.Map; 7 8 import javax.json.Json; 9 10 import org.apache.struts2.json.JSONUtil;11 import org.springframework.web.bind.annotation.ResponseBody;12 13 import com.alibaba.fastjson.JSON;14 15 import cn.emay.slf4j.helpers.Util;16 import shop.zhangchenguang.pojo.Customer2;17 import shop.zhangchenguang.service.CustomerService;18 import util.action.BaseAction;19 import util.other.Utils;20 21 /**22 * 测试代码Action23 * @author Hellxz24 *25 */26 public class CustomerAction extends BaseAction{27 28 //注入service层29 private CustomerService customerServiceImpl;30 //需要写get、set方法31 public CustomerService getCustomerServiceImpl() {32 return customerServiceImpl;33 }34 public void setCustomerServiceImpl(CustomerService customerServiceImpl) {35 this.customerServiceImpl = customerServiceImpl;36 }37 //跳转到主页38 public String index() throws IOException{39 return "success";40 }41 //保存用户信息42 public void customerSave() throws IOException{43 //获取输出流44 response.setContentType("json/application;charset=UTF-8");45 PrintWriter out = response.getWriter();46 //获取传入数据对象47 Customer2 customer = new Customer2();48 customer.setLoginName(request.getParameter("loginName"));49 customer.setPassword(request.getParameter("password"));50 customer.setNickName(request.getParameter("nickName"));51 customer.setPhone(request.getParameter("phone"));52 customer.setEmail(request.getParameter("email"));53 customer.setPhotoUrl(request.getParameter("photoUrl"));54 customer.setType(Integer.parseInt(request.getParameter("type")));55 customer.setShareType(Integer.parseInt(request.getParameter("shareType")));56 customer.setIsCanBuy(Integer.parseInt(request.getParameter("isCanBuy")));57 customer.setPayPassword(request.getParameter("payPassword"));58 customer.setOpenId(request.getParameter("openid"));59 //补全数据……还没写60 //调用service保存对象61 Object obj = customerServiceImpl.saveOrUpdateObject(customer);62 /**63 * 如果保存的对象是非空的,那么已经保存成功64 * 如果为空,则保存失败65 * 无论保存成功那个与否,都要把json对象写回给客户端,进行判断66 */67 if(Utils.objectIsNotEmpty(obj)){68 out.println(JSON.toJSONString(checkOK()));69 }else{70 out.println(JSON.toJSONString(checkFail()));71 }72 }73 /**74 * @return json对象状态20075 */76 @SuppressWarnings({"unchecked","rawtypes"})77 public Object checkOK(){78 Map m = new HashMap<>();79 m.put("status", 200);80 m.put("msg", "添加成功");81 m.put("data", null);82 return m;83 }84 /**85 * @return json对象状态50086 */87 @SuppressWarnings({"unchecked","rawtypes"})88 public Object checkFail(){89 Map m = new HashMap<>();90 m.put("status", 500);91 m.put("msg", "添加失败");92 m.put("data", null);93 return m;94 }95 96 }
附上struts的配置文件
/WEB-INF/hellxz/jsp/index.jsp /WEB-INF/hellxz/jsp/{1}-{2}.jsp
到这里大家可能明白是怎么实现的了,老规矩捋一下流程:
1、在struts配置文件中让表单提交的请求响应到action中,不需要定义result,
2、响应进来之后,我们定义的方法需要设置void返回值,在方法体就可以通过老办法 request.getParameter()方法获取这些表单中的参数,然后放到pojo中持久化
3、持久化成功会返回一个新的对象,判断这个对象是否为空,然后通过这个结果来对应应该用到的检查方法,这里使用了alibaba的Fastjson中的JSON对象的toJsonString()方法来实现把对象转换成json串
4、通过response.getWriter()方法拿到的输出流,我们使用println()方法打印出来那个json串给浏览器端
5、浏览器端的ajax收到带有状态码200的json串,弹窗提示用户存储成功
说着简单,其实就是jsp和servlet时候常用的方法,springmvc用习惯了,反而忘了最基本的方法,罪过罪过。