编写通用Action
public class BaseAction extends ActionSupport implements SessionAware, RequestAware,ServletResponseAware {
private static final String PROJECT_NAME = "/demo";
private static final long serialVersionUID = 1L;
protected Map<String,Object> session;
protected Map<String,Object> request;
protected HttpServletResponse response;
public static String getProjectName() {
return PROJECT_NAME;
}
public void setRequest(Map<String, Object> request) {
this.request = request;
}
public void setSession(Map<String, Object> session) {
this.session = session;
}
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
public HttpServletResponse getResponse() {
return response;
}
public void setResponse(HttpServletResponse response) {
this.response = response;
}
}
Action
public class ChannelAPIAction extends BaseAction {
private static final long serialVersionUID = 1L;
@Autowired
private ProductsService productsService;
@Action(value = "/api/findAll")//因为昨天忘记加“/”,一直报错,昨天的解决方法不够简洁
public void list() {
System.out.println("api/list");
List<Products> list = productsService.list();
JSONArray json = JSONArray.parseArray(JSON.toJSONString(list));
JSONObject object = new JSONObject();
object.put("code", 200);
object.put("data", json);
AjaxResponse.ajaxPrintByJson(object);
// AjaxResponse.responseOut(object);
// return "json";
}
}
public static void responseOut(Object value){
HttpServletResponse response = responseCommon();
try {
response.getWriter().write(value.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Ajax输出json
**/
public static void ajaxPrintByJson(Object content) {
HttpServletResponse response = responseCommon();
try {
response.setContentType("text/json;charset=UTF-8");
java.io.PrintWriter out = response.getWriter();
out.print(content);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static HttpServletResponse responseCommon(){
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
return response;
}
web页面返回数据展示
因为一个“/”解决这个问题多花费了时间,根本原因对Struts2不熟悉,直接原因“/”,需要警醒,类似的错误犯了一次又一次