菜单 MenuAction.java
package com.kcsj.action;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.json.annotations.JSON;
import com.kcsj.bean.Menu;
import com.kcsj.json.MenuJson;
import com.kcsj.service.IMenuService;
import com.kcsj.tool.HttpJsonUtil;
@Action(value = "menuAction") //Spring注入,方便前后台调用
public class MenuAction extends BaseAction {
private IMenuService menuService;
private Menu menu = new Menu();
private String id;
public Menu getMenu() {
return menu;
}
public void setMenu(Menu menu) {
this.menu = menu;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@JSON(serialize=false)
public IMenuService getMenuService() {
return menuService;
}
public void setMenuService(IMenuService menuService) {
this.menuService = menuService;
}
//前台通过menuAction!queryManu() 调用该方法
public void queryMenu() {
List<Menu> menuList = new ArrayList<Menu>();
try {
menu.setMenuId(id);
menuList = menuService.queryMenu(menu);
// list转换为json,具体见下
JSONArray jsonArray = MenuJson.ToJsonArray(menuList);
//自定义类,具体见下
HttpJsonUtil.writeJsonData(response, jsonArray);
//异常处理
} catch (Exception e) {
e.printStackTrace();
JSONObject jsonResponse = new JSONObject();
try {
jsonResponse.put("result", "failed");
jsonResponse
.put("message", URLEncoder.encode("操作异常!", "utf-8"));
HttpJsonUtil.writeJsonData(response, jsonResponse);
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}
json数据转换
MenuJson.java
public class MenuJson {
public static JSONArray ToJsonArray(List<Menu> menuList) {
JSONArray jsonArrayIn = new JSONArray();
for (Menu menu : menuList) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("id", menu.getMenuId());
jsonObject.put("text", menu.getName());
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put("url", menu.getUrl());
jsonObject.put("attributes", attributes);
if(menu.getIsLeaf().equals("0")){
jsonObject.put("state", "closed");
}else{
jsonObject.put("state", "open");
}
jsonArrayIn.put(jsonObject);
}
return jsonArrayIn;
}
}
HttpJsonUtil.java
// 将数据返回前台
public static void writeJsonData(HttpServletResponse response,
JSONArray jsonArray) throws Exception {
response.setCharacterEncoding("UTF-8"); //编码设置,防止乱码
response.getWriter().write(jsonArray.toString());
}
说明: 网上很多通过struts 返回json数据出了很多问题,这种方法的好处就是直接将数据返回前台。省去了struts。