• DWR(三):转换器


    转换器:转换器的作用是完成POJO(Java对象)和JavaScript类型之间的相互转换,从而保证Ajax交互的正常通信;

    为什么使用:因为除了基本的数据类型、String型之外的自定义Java数据类型,DWR是无法识别的,必须在配置文件中定义转换器;

    1.基本转换器

    对于基本的数据类型Dwr已经提供了转换器,无需再次配置

    基本的数据类型有:

     boolean, byte, short, int, long, float, double, char, java.lang.Boolean, java.lang.Byte, java.lang.Short, java.lang.Integer, java.lang.Long, java.lang.Float, java.lang.Double, java.lang.Character, java.math.BigInteger, java.math.BigDecimal 和 java.lang.String

    2.日期时间类型转换器

    Dwr是提供转换器的。

    若是 有一个字符串"2016-01-01",要转成时间类型做参数,

    ①可以用JS的Date.parse()方法,将字符串转成Date类型,然后就交由Dwr的转换器处理了;

    ②往后端传"2016-01-01"字符串,然后由后端Java进行数据类型转换;(个人认为这样做很low);

    前端JSP

    var time = Date.parse("2015-01-01");
        var t2 = new Date( time );
    
         AdminManager.setTime(t2,function(data){
             alert("回调函数");
            });

    后端Java

    public void setTime(Date date){
            System.out.println("传入的时间是:"+(new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss")).format(date));
        }

    3.对象转换器

    Java自定义的对象转换为javaScript对象的方式分两种:
    Bean转换器:利用getter、setter方法;若Java对象的属性没有设置getter、setter方法该属性是无法被转换的;
    Object转换器:利用反射原理;若Java对象的属性没有设置getter、setter方法该属性是可以被转换的;若该属性的private,则需要设置 foce;(该方式本人没有试验成功)

    黑名单、白名单

    dwr的XML

                <!--java 自定义对象的 Bean转换方式 -->
        <convert converter="bean" match="com.devan.test.admin.Admin">
            <!-- <param name="include" value="adminPass"></param> --> <!-- 白名单 -->
            <!-- <param name="exclude" value="adminPass"></param> --> <!-- 黑名单 -->
        </convert>
    /* 前端调用 */
    function setBean(){
        var objJSON = {adminName:"姓名",adminPass:"密码"};
         AdminManager.setAdmin(objJSON,function(data){
        });
    }
    /** 后端 Java**/    
    public void setAdmin(Admin admin){
            System.out.println("获得Java-Bean");
            System.out.println("参数输出:");
            System.out.println("name-"+admin.getAdminName());
            System.out.println("pass-"+admin.getAdminPass());
        }

    所有测试代码如下:

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>testDwr</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
    <!--   ①##后端 DWR -->
    <!--   Dwr核心Servlet -->
      <servlet>
          <servlet-name>dwrAdmin</servlet-name>
          <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
         </init-param>
         <init-param>
            <param-name>config-admin</param-name>
            <param-value>WEB-INF/dwr_xml/admin.xml</param-value>
         </init-param>
      </servlet>
      <!--   Dwr核心Servlet Url映射-->
      <servlet-mapping>
          <servlet-name>dwrAdmin</servlet-name>
          <url-pattern>/adminUrl/*</url-pattern>
      </servlet-mapping>
      
      <!--   ##前端 DWR -->
    <!--   Dwr核心Servlet -->
      <servlet>
          <servlet-name>dwrFace</servlet-name>
          <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
         </init-param>
        <init-param>
            <param-name>config-face</param-name>
            <param-value>WEB-INF/dwr_xml/face.xml</param-value>
         </init-param>
         
      </servlet>
      <!--   Dwr核心Servlet Url映射-->
      <servlet-mapping>
          <servlet-name>dwrFace</servlet-name>
          <url-pattern>/faceUrl/*</url-pattern>
      </servlet-mapping>
      
      
    
    
    </web-app>

    dwr.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd">
    
    <dwr>
      <allow>
      
    <!--   创造器 -->
        <create creator="new" javascript="AdminManager">
          <param name="class" value="com.devan.test.admin.AdminManager"/>
        </create>
        
    <!--   转换器 -->
                    <!--java 自定义对象的 Bean转换方式 -->
        <convert converter="bean" match="com.devan.test.admin.Admin">
            <!-- <param name="include" value="adminPass"></param> --> <!-- 白名单 -->
            <!-- <param name="exclude" value="adminPass"></param> --> <!-- 黑名单 -->
        </convert>
                    <!--java 自定义对象的 Object转换方式 -->
        <!-- <convert converter="object" match="com.devan.test.admin.Admin">
            <param name="foce" value="true"/>
        </convert> -->
        
      </allow>
    
    </dwr>

    JavaBean对象

    package com.devan.test.admin;
    
    public class Admin {
        
        private String adminName;
        private String adminPass;
        private int sex = 12;
        public String getAdminName() {
            return adminName;
        }
        public void setAdminName(String adminName) {
            this.adminName = adminName;
        }
        public String getAdminPass() {
            return adminPass;
        }
        public void setAdminPass(String adminPass) {
            this.adminPass = adminPass;
        }
    
    }

    Java 操作类

    package com.devan.test.admin;
    
    import java.lang.reflect.Array;
    import java.util.ArrayList;
    import java.util.Date;
    
    public class AdminManager {
        //String 
        public String  getStr(){
            return "返回String类型";
        }
        public void setStr(String str){
            System.out.println("获得传递的参数"+str);
        }
        
        //日期时间
        public Date getTime(){
            return new Date();
        }
        
        public void setTime(Date date){
            System.out.println("传入的时间是:"+(new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss")).format(date));
        }
        
        
        //Java Bean
        public Admin getAdmin(){
            Admin admin = new Admin();
            admin.setAdminName("管理员");
            admin.setAdminPass("123456");
            return admin;
        }
        public void setAdmin(Admin admin){
            System.out.println("获得Java-Bean");
            System.out.println("参数输出:");
            System.out.println("name-"+admin.getAdminName());
            System.out.println("pass-"+admin.getAdminPass());
        }
        
        
        // 纯数组
        public String[] getArrayBase(){
            String[] items = {"A","B","C","D","F"};
            return items;
        }
        public void setArrayBase(String[] items){
            System.out.println("传入的数组:");
            for(String str:items){
                System.out.print(str+"、");
                
            }
            System.out.println();
        }
        // Java对象
        public ArrayList<Admin> getArrayObject(){
                ArrayList<Admin> adminList = new ArrayList<Admin>();
                Admin admin_1 = new Admin();
                admin_1.setAdminName("管理员1");
                admin_1.setAdminPass("12345");
                
                Admin admin_2 = new Admin();
                admin_2.setAdminName("管理员2");
                admin_2.setAdminPass("67890");
                
                adminList.add(admin_1);
                adminList.add(admin_2);
                
                return adminList;
            }
        public void setArrayObject(ArrayList<Admin> adminList){
            for(Admin admin:adminList){
                System.out.println("-------");
                System.out.println(admin.getAdminName()+"--"+admin.getAdminPass());
            }
        }
        
        
    }

    前端访问 JSP

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!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>
    <!-- JS -->
    <script type="text/javascript" src="./js/jquery.js"></script>
    <script type='text/javascript' src='/testDwr/adminUrl/engine.js'></script>
     <script type='text/javascript' src='/testDwr/adminUrl/util.js'></script>
    <script type='text/javascript' src='/testDwr/adminUrl/interface/AdminManager.js'></script>
      
    <script type="text/javascript">
    $(function(){
        
    });
    
    function getStr(){
        AdminManager.getStr(function(data){
            alert(data);
        });
    }
    
    function setStr(){
        AdminManager.setStr("TEST",function(data){
            alert(data);
        });
    }
    
    /* Bean */
    function getBean(){
        console.log("Yan-1");
         AdminManager.getAdmin(function(data){
            alert(data.adminName);
            console.log("JavaBean");
            console.log(data);
        });
    }
    function setBean(){
        var objJSON = {adminName:"姓名",adminPass:"密码"};
         AdminManager.setAdmin(objJSON,function(data){
        });
    }
    
    /* Date Time */
    function getTime(){
         AdminManager.getTime(function(data){
             alert(data);
             alert(new Date());
                console.log("Time");
                console.log(data);
            });
    }
    function setTime(){
        var now = new Date();
        var time = Date.parse("2015-01-01");
        var t2 = new Date( time );
    
         AdminManager.setTime(t2,function(data){
            });
    }
    
    /* Array */
                    /* Base */
    function getArrayBase(){
        AdminManager.getArrayBase(function(data){
             alert(data);
             console.log(data);
            });
    }
    function setArrayBase(){
        var arrayJSON = ["AA","BB","CC","DD"] ;
        AdminManager.setArrayBase(arrayJSON,function(data){
            });
    }
                    /* Objcet */
    function getArrayObj(){
        AdminManager.getArrayObject(function(data){
             alert(data);
             console.log(data);
            });
    }
    function setArrayObj(){
        var arrayJSON = [{adminName:"管理员A",adminPass:"A123"},{adminName:"管理员B",adminPass:"B456"}] ;
        AdminManager.setArrayObject(arrayJSON,function(data){
            });
    }
    </script>
    </head>
    <body>
    <h3>基本类型</h3>
    <button onclick="getStr()">获得String</button><br>
    <button onclick="setStr()">设置String</button><br>
    
    <h3>Date Time</h3>    
    <button onclick="getTime()">获得日期时间</button><br>        
    <button onclick="setTime()">设置日期时间</button><br>
    
    <h3>Java  Bean</h3>    
    <button onclick="getBean()">获得Java-Bean</button><br>
    <button onclick="setBean()">设置Java-Bean</button><br>
    
    
    <h3>数组</h3>
    <h5>纯数组</h5>
    <button onclick="getArrayBase()">获得Array-Base</button><br>
    <button onclick="setArrayBase()">设置Array-Base</button><br>
    
    <h5>Obj数组</h5>
    <button onclick="getArrayObj()">获得Array-Object</button><br>
    <button onclick="setArrayObj()">设置Array-Object</button><br>
        
            
    </body>
    </html>
  • 相关阅读:
    Richardson成熟度模型:关于REST的不同风格
    领域驱动设计
    dubbo初探
    pom使用异常问题
    [转]解决BootStrap validator验证的图标错位问题
    万恶的360浏览器
    利用Barcode4j实现输出ean13条形码到文件、流的工具类
    使用hibernate中的hql进行分页设置setMaxResults(int a)出错,索引1越界,hql执行不了等等问题
    Mysql 5.6以上版本zip安装方法
    Hibernate5生成的映射文件导致findByExample无法正确查询到结果
  • 原文地址:https://www.cnblogs.com/devan/p/5252258.html
Copyright © 2020-2023  润新知