关于元素的type属性

• 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")

你可能感兴趣的:(关于元素的type属性)