zoukankan      html  css  js  c++  java
  • 转换器

    struts转换器:在B/S应用中,将字符串请求参数转换为相应的数据类型,是MVC框架提供的功能,而Struts2是很好的MVC框架实现者,理所当然,提供了类型转换机制。

    一、类型转换的意义

    对于一个智能的MVC框架而言,不可避免的需要实现类型转换.因为B/S(浏览器/服务器)结构应用的请求参数是通过浏览器发送到服务器的,这些参数不可能有丰富的数据类型,因此必须在服务器端完成数据类型的转换

    MVC框架是一个表现层解决方案,理应提供类型转换的支持,Struts2提供了功能非常强大的类型转换支持.

    二、表现层数据的处理

    1、对于web应用而言,表现层主要用于与用户交互,包括收集用户输入数据,向用户呈现服务器的状态。因此表现层的数据的流向主要有两个方向:输入数据和输出数据。

    2、对于输入数据:则需要完成由字符串数据向多种类型数据的转化。程序通常无法自动完成,需要在代码中手动转化

    3、对于输出数据:不管是java或是jsp都支持多种数据类型的直接输出。

    4、表现层另外一个数据处理是:数据校验,分为客户校验和服务器端校验.后边会重点讲解

    三、类型转换

    1、HTTP参数都是字符串类型。 保存的数据可能是字符串、数字、布尔、日期时间等或者JavaBean类型。 手工的类型转换,比如将字符串转换为日期,通过: 通过request.getParameter方法获取字符串; 检查是否为空; 通过DateFormat.parse方法将字符串转换为Date对象

    2、Struts2类型转换

    Struts2内置的类型转换
    String和boolean 完成字符串与布尔值之间的转换
    String和char  往常字符串与字符之间的转换
    String和int、Integer 完成字符串与整型之间的转换
    String和Long 完成字符串与长整型值之间的转换
    String和double、Double 完成字符串与双精度浮点值的转换
    String和Float 完成字符串和单精度浮点之间的转换
    String和Date 完成字符串和日期类型之间的转换,日期格式使用格式用户请求所在Locale的SHORT格式
    String和数组 在默认的情况,数组元素是字符串,如果用户定义类型转换器,也可以是其它复合数据类型
    String和Map、List

    ***************************************************************************************

    应用场景:输出界面/输出界面 与 对象/数据库不是一一对应的关系。或者格式不一样。
    实例:输入身份证号,自动解析出生日或其它信息。

    首先做一个Student.java类:

    package maya.model;
    
    public class Student {
        private String name;
        private String idNumber;// 身份证号
        private String birthday;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getIdNumber() {
            return idNumber;
        }
        public void setIdNumber(String idNumber) {
            this.idNumber = idNumber;
        }
        public String getBirthday() {
            return birthday;
        }
        public void setBirthday(String birthday) {
            this.birthday = birthday;
        }
        
    }

    配置struts.xml文件:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.devMode" value="true" />
    
        <package name="default" namespace="/" extends="struts-default">  
            <action name="*_*" class="com.itnba.maya.controller.{1}Action" method="{2}">     
                <result>
                    {1}_{2}.jsp
                </result>
            </action>
        </package>   
    </struts>

    再做一个StudentAction.java类:

    package maya.controller;
    
    import maya.model.Student;
    import com.opensymphony.xwork2.ActionSupport;
    
    public class StudentAction extends ActionSupport {
        private Student stu;    
        
        public Student getStu() {
            return stu;
        }
        public void setStu(Student stu) {
            this.stu = stu;
        }
        public String input(){
            return SUCCESS;
        }
        public String show(){        
            return SUCCESS;
        }
    }

    做转换器的类。 --- 继承StrutsTypeConverter

    package maya.util;
    
    import java.util.Map;
    
    import org.apache.struts2.util.StrutsTypeConverter;
    
    import com.itnba.maya.model.Student;
    
    public class MyTypeConverter extends StrutsTypeConverter {
    
        @Override
        public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
            String str = arg1[0];    //370303199009210989
            
            //截取对应的日期
            String year = str.substring(6, 10);
            String month = str.substring(10, 12);
            String day = str.substring(12, 14);
            
            Student stu = new Student();
            stu.setBirthday(year+"-"+month+"-"+day);//获取到生日
            stu.setIdNumber(str);//重新把身份证附给IdNumber
            
            return stu;
        }
    
        @Override
        public String convertToString(Map arg0, Object arg1) {
    
            return null;
        }
    }

    转换器的配置:

    全局配置和局部配置都可以实现功能,写一个即可


    1.全局配置。在src根下,建立xwork-conversion.properties文件。

    配置好实体类与转换类的二者完全限定名对应关系。如com.itnba.maya.model.Student=com.itnba.maya.util.MyTypeConverter

    图片取自他人,看懂思想,下同

    2.局部配置。在action的包里面,建立Action类名-conversion.properties文件(StudentAction-conversion.properties)。

    配置好成员变量与转换类的对应关系。如stu=com.itnba.maya.util.MyTypeConverter

    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>
    </head>
    <body>
    <h1>学生信息录入</h1>
    <form action="Student_show" method="post">
    姓名:<input type="text" name="stu.name"><br>
    身份证号:<input type="text" name="stu"><br>
    <input type="submit" value="submit">
    </form>
    </body>
    </html>

    显示名字、生日、身份证号

    <%@ 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>
    </head>
    <body>
    ${stu.name } -- ${stu.idNumber } --${stu.birthday }
    
    <s:debug></s:debug>
    </body>
    </html>

    显示结果:

    总结:

    第一步:做转换器的类。 --- 继承StrutsTypeConverter

    第二步:配置。

    第一种:全局配置。在src根下,建立xwork-conversion.properties文件。配置好实体类与转换类的二者完全限定名对应关系。
    第二种:局部配置。在action的包里面,建立Action类名-conversion.properties文件(StudentAction-conversion.properties)。
    配置好成员变量与转换类的对应关系。stu=com.itnba.maya.util.StudentConverter



  • 相关阅读:
    C#域名解析
    【转】正则基础之——贪婪与非贪婪模式
    【转】正则基础之——神奇的转义
    总结:实例化SqlParameter时,如果是字符型,一定要指定size属性,还有制定具体的类型
    从数据库里随机读取几条数据
    Html异步下载分析
    C#生成验证码程序
    【转】正则应用之——逆序环视探索
    如何用class在Dictionary里面作为Key使用
    【转】SqlDataReader 提前终止的性能问题
  • 原文地址:https://www.cnblogs.com/jonsnow/p/6581187.html
Copyright © 2011-2022 走看看