美文网首页
关于元素的type属性

关于元素的type属性

作者: 黎涛note | 来源:发表于2017-12-26 22:28 被阅读0次
    • 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<String, Object> condition = new HashMap<String, Object>();
            if (prdName != null) {
                condition.put("prdName",prdName);
            }
            if (lowPrice != null) {
                condition.put("lowPrice",lowPrice);
            }
            if (highPrice != null) {
                condition.put("highPrice",highPrice);
            }
            //获得检索的商品信息
            List<ProductInfo> 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字符串方法二
    • 配置<result type=“json”>方式返回json结果,以符合struts工作流程的方式来返回json数据

    1、添加 struts2-json-plugin-2.3.x.jar
    2、Action中将需要返回的java对象放入值栈中,并返回”success”
    3、在struts.xml中配置:

    <package extends="json-default" ...>
    <result type="json">
    <param name="root">object key</param>
    </result>
    </package>
    

    【示例】

    /**
         * 根据条件检索商品,返回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<String, Object> condition = new HashMap<String, Object>();
            if (prdName != null) {
                condition.put("prdName",prdName);
            }
            if (lowPrice != null) {
                condition.put("lowPrice",lowPrice);
            }
            if (highPrice != null) {
                condition.put("highPrice",highPrice);
            }
            //获得检索的商品信息
            List<ProductInfo> prdList = this.productService.searchByCondition(condition);
            //将服务器返回的信息放入值栈中,让客户端来获取
            super.add2ValueStack("prdList", prdList);
            return SUCCESS;
        }
    

    struts.xml配置

    <action name="prdSearch2" class="com.xixi.struts_demo.action.ProductAction" method="prdSearch2">
         <result type="json">
                <param name="root">prdList</param>
         </result>
    </action>
    

    jsp页面获取数据

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
        <script type="text/javascript" src="/struts_demo/js/jquery-3.2.1.js"></script>
            <script type='text/javascript'>
               jQuery(function(){
                  $("input[value='检索']").click(function(){
                      var prdName = $("input[name='prdName']").val();
                      var lowPrice = $("input[name='lowPrice']").val();
                      var highPrice = $("input[name='highPrice']").val();
                    
                      var data={};
                      
                      if (prdName) {
                          data.prdName = prdName;
                      }
                      
                      if (lowPrice) {
                          data.lowPrice = lowPrice;
                      }
                      
                      if (highPrice) {
                          data.highPrice = highPrice;
                      }
                    //  $.post("/struts_demo/prd/prdSearch.action",data,function(r){
                      $.post("/struts_demo/prd/prdSearch2.action",data,function(r){
                          if (r) {
                              console.info(r);
                              var prd = null;
                              var tbody = $("#tbody1");
                              tbody.empty();
                              var row = null ;
                              for (var  i=0; i<r.length; i++) {
                                  prd = r[i];
                                  console.info(prd.productDate);
                                  row = "<tr><td>" + prd.prdId+"</td><td>"+prd.typeId+"</td><td>"+prd.prdName+"</td><td>"+prd.prdDesc+"</td><td>"+prd.price+"</td></tr>";
                                  tbody.append(row);
                              }
                          }
                      },"json");
                  });
              });
        </script>
    </head>
    <body>
        <h3>商品检索</h3>
        商品名称:<input type="text" name="prdName"/><br/>
        价格范围:<input type="text" name="lowPrice"/>~<input type="text" name="highPrice"/><br/>
                           <input type="button" value="检索"/>
        <hr/>
        <table>
            <thead>
                <tr>
                    <th>商品编号</th>
                    <th>类别</th>
                    <th>名称</th>
                    <th>描述</th>
                    <th>价格</th>
                </tr>
            </thead>
            <tbody id="tbody1">
                
            </tbody>
            <tr>
        </table>
    </body>
    </html>
    
    注: java.util.Date对象返回到客户端后是String对象,若要控制该字符串格式,可在java类的相关属性get方法上添加@JSON注解。如下:
    @JSON(format = "yyyy-MM-dd HH:mm:ss")
    

    相关文章

      网友评论

          本文标题:关于元素的type属性

          本文链接:https://www.haomeiwen.com/subject/daaegxtx.html