• type属性表明了本次应答结果的类型。该属性的取值可使用struts-default.xml
中预定义的result-type:
dispatcher //(默认值)转发到jsp页面;
stream //文件流
redirect //重定向(可以转到jsp或action)
redirectAction //重定向到另一Action
• redirect与redirectAction的使用区别:
1、使用redirect时url需要.action后缀名,使用redirectAction不需要后缀名;
2、redirect可以转到其它命名空间下的action或其它网址,而redirectAction只能转到同一命名空间下的 action
• 如果要返回JSON文本,可定义action类的execute()方法返回void,在代码中直接使用HttpServletResponse输出JSON字符串即可。
【示例代码】
HttpServletResponse resp=ServletActionContext.getResponse();
resp.setCharacterEncoding("utf-8");
resp.setContentType("application/json");
resp.getWriter().println(array.toString());
生成JSON字符串方法一
• 使用json-lib.jar帮助生成JSON字符串,它依赖ezmorph.jar,所以在想要利用这两个jar包,需要将他们的jar文件拷贝到webContent下的lib文件夹中,当然也可以使用其他两个jar文件jackson-core-asl-1.9.2.jar和jackson-mapper-asl-1.9.2.jar,用法上稍有区别
单个java对象的转换
JSONObject.fromObject(bean).toString();
若要返回数组:
JSONArray.fromObject(bean).toString();
JSONArray.fromObject(array).toString();
其中的array参数可以为java数组对象,也可以是java的集合对象
注:java.util.Date对象返回到客户端后是普通的javascript对象。
private Date productDate = new Date();
public Date getProductDate() {
return productDate;
}
public void setProductDate(Date productDate) {
this.productDate = productDate;
}
/**
* 商品检索返回json格式的数据
*/
public void prdSearch() {
String prdName = super.getParameter("prdName", String.class);
Float lowPrice = super.getParameter("lowPrice", Float.class);
Float highPrice = super.getParameter("highPrice", Float.class);
//将客户端提交的参数装载到Map集合中
HashMap condition = new HashMap();
if (prdName != null) {
condition.put("prdName",prdName);
}
if (lowPrice != null) {
condition.put("lowPrice",lowPrice);
}
if (highPrice != null) {
condition.put("highPrice",highPrice);
}
//获得检索的商品信息
List prdList = this.productService.searchByCondition(condition);
//以JSON格式返回给客户端
HttpServletResponse resp = ServletActionContext.getResponse();
//服务器响应的字符集
resp.setCharacterEncoding("utf-8");
//服务器响应的内容类型
resp.setContentType("application/json");
//将服务器包装的数据应答到客户端
try {
JSONArray.fromObject(prdList).write(resp.getWriter());
} catch (IOException e) {
e.printStackTrace();
}
}
生成JSON字符串方法二
• 配置方式返回json结果,以符合struts工作流程的方式来返回json数据
1、添加 struts2-json-plugin-2.3.x.jar
2、Action中将需要返回的java对象放入值栈中,并返回”success”
3、在struts.xml中配置:
object key
【示例】
/**
* 根据条件检索商品,返回json格式的数据
*
* @return
*/
public String prdSearch2() {
String prdName = super.getParameter("prdName", String.class);
Float lowPrice = super.getParameter("lowPrice", Float.class);
Float highPrice = super.getParameter("highPrice", Float.class);
//将客户端提交的参数装载到Map集合中
HashMap condition = new HashMap();
if (prdName != null) {
condition.put("prdName",prdName);
}
if (lowPrice != null) {
condition.put("lowPrice",lowPrice);
}
if (highPrice != null) {
condition.put("highPrice",highPrice);
}
//获得检索的商品信息
List prdList = this.productService.searchByCondition(condition);
//将服务器返回的信息放入值栈中,让客户端来获取
super.add2ValueStack("prdList", prdList);
return SUCCESS;
}
struts.xml配置
prdList
jsp页面获取数据
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
Insert title here
商品检索
商品名称:
价格范围:~
商品编号
类别
名称
描述
价格
注: java.util.Date对象返回到客户端后是String对象,若要控制该字符串格式,可在java类的相关属性get方法上添加@JSON注解。如下:
@JSON(format = "yyyy-MM-dd HH:mm:ss")