struts-基础内容-6-数据的自动封装和类型转换

请求数据的自动封装

实现的原理-参数处理拦截器

<interceptor name="staticParams" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/>

方式1.jsp表单数据填充到action中的属性

<%--
  Created by IntelliJ IDEA.
  User: cxspace
  Date: 16-7-9
  Time: 下午11:39
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

     <form action="${pageContext.request.contextPath}/user_register.action" method="post">
          用户名:<input type="text" name="name"> <br>
           密码:<input type="password" name="pwd"> <br>
         年龄:<input type="text" name="age"> <br>
         生日: <input type="text" name="birth"> <br>
         <input type="submit" value="注册">
     </form>
</body>
</html>
import java.util.Date;

/**
 *
 * struts核心业务,请求数据自动封装及类型转换
 * Created by cxspace on 16-7-10.
 */
public class UserAction {

    //拿到请求数据
    private String name;
    private String pwd;
    private int age;
    private Date birth;

    //必须要给set方法get可以不用给

    public void setName(String name) {
        this.name = name;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    //处理注册请求
     public String register(){

         System.out.println(name);
         System.out.println(pwd);
         System.out.println(age);
         System.out.println(birth);
         return "success";
     }

}

方式2.jsp表单数据填充到action中的对象中的属性-对象类型一定要给get方法

User

package com.cx.type;

import java.util.Date;

/**
 * Created by cxspace on 16-7-10.
 */
public class User {
    //拿到请求数据
    private String name;
    private String pwd;
    private int age;
    private Date birth;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }
}
Action

package com.cx.type;

/**
 *
 * struts核心业务,请求数据自动封装及类型转换
 * Created by cxspace on 16-7-10.
 */
public class UserAction {

    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    //必须要给set方法get可以不用给

    //处理注册请求
     public String register(){

         System.out.println(user.getName());
         System.out.println(user.getPwd());
         System.out.println(user.getAge());
         System.out.println(user.getBirth());
         return "success";
     }

}
jsp

<%--
  Created by IntelliJ IDEA.
  User: cxspace
  Date: 16-7-9
  Time: 下午11:39
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   <form action="${pageContext.request.contextPath}/user_register.action" method="post">
          用户名:<input type="text" name="user.name"> <br>
           密码:<input type="password" name="user.pwd"> <br>
         年龄:<input type="text" name="user.age"> <br>
         生日: <input type="text" name="user.birth"> <br>
         <input type="submit" value="注册">
     </form>
</body>
</html>

类型转换-转换器的使用

Strus中 jsp提交的数据,struts会自动转换为action中属性的类型

对于基本数据类型以及日期类型会自动转换

日期类型只支持yyyy-MM-dd格式

需要自定义类型转换器

局部类型转换器

全局类型转换器

Struts转换器api

|----TypeConverter  转换器接口

|----默认类型转换器类

|----StrutsTypeConverter  转换器类

把19900318  ==> 1990-03-18

一.局部类型转换

1.写转换器类

package com.cx.type;

import org.apache.struts2.util.StrutsTypeConverter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;

/**
 * Created by cxspace on 16-7-10.
 */
public class MyConverter extends StrutsTypeConverter {

    /*
    *
    * 把String 转换到特定类型
    *
    *
    * context当期上下问环境
    *
    * values表单中字符串值
    *
    *
    * */

    @Override
    public Object convertFromString(Map context, String[] values, Class aClass) {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

        try {
            return sdf.parse(values[0]);

        } catch (ParseException e) {

            throw new RuntimeException(e);

        }

    }

    @Override
    public String convertToString(Map map, Object o) {
        return null;
    }
}

2.配置转换器类

在同包的action目录下新建属性配置文件

该文件命名规则:ActionClassName-conversion.properties

3.转换内容

配置文件内容-包含要转换的属性和对应的处理类

user.birth=com.cx.type.MyConverter  

user.birth=转换器类全路径(com.cx.type.MyConverter)

4.这个转换器不能给其他的action用

二.全局转换器

写一个转换器给所有action用

-->在src目录下建xwork-conversion.properties

-->内容

转换的类型=转换器全路径

package com.cx.type;

import org.apache.struts2.components.Date;
import org.apache.struts2.util.StrutsTypeConverter;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;

/**
 * Created by cxspace on 16-7-10.
 */
public class MyConverter extends StrutsTypeConverter {

    /*
    *
    * 把String 转换到特定类型
    *
    *
    * context当期上下问环境
    *
    * values表单中字符串值
    *
    *
    * */

    //如果项目中要支持的类型很多  yyyy-MM-dd/yyyyMMdd/yyyy年MM月dd日

    DateFormat  [] df = {
            new SimpleDateFormat("yyyy-MM-dd"),
            new SimpleDateFormat("yyyyMMdd"),
            new SimpleDateFormat("yyyy年MM月dd日")
    };

    //定义项目中支持的转换格式

    @Override
    public Object convertFromString(Map context, String[] values, Class aClass) {

            //判断内容不能为空

            if (values==null||values.length==0)
            {
                return null;
            }

            //判断类型必须为Date
            if(Date.class!=aClass)
            {
                return null;
            }

        //转换失败下一次循环
        for(int i=0 ; i < df.length ; i++)

        {
            try {
                return df[i].parse(values[0]);
            } catch (ParseException e) {
                  continue;
            }

        }

        return null;

    }

    @Override
    public String convertToString(Map map, Object o) {
        return null;
    }
}
时间: 2024-07-31 14:44:22

struts-基础内容-6-数据的自动封装和类型转换的相关文章

(24) java web的struts2框架的使用-action参数自动封装与类型转换

structs可以对参数进行自动封装,做法也很简单. 一,action参数自动封装: 1,可以直接在action类中,声明public的属性,接受参数. 2,属性也是是private,如果是private,需要提供setter方法,也可以根据需要提供getter方法. 3,struts可以自动对类型进行转换,一般我们会传递String类型的参数,struts可以转换成默认声明的变量类型 4,调用api时候,传递的参数名必须和action类中声明的名称相同. public class UserAc

Struts2请求数据自动封装和数据类型转换

方式1:jsp表单数据填充到action中的属性: 方式2:jsp表单数据填充到action的对象的属性: 方式1: 第一步:引包,省去 第二步:配置struts2的过滤器 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmln

利用反射自动封装成实体对象

利用此方法的时候需要传递的参数的名称,必须以行号结尾,去掉行号就是属性名称,比如页面传递name+rowNo,那么实体对象的属性名应该为name.代码如下 //获取页面数据,自动封装成bean对象 public List getObjectList(Class clazz,String[] rowNos) throws Exception{ List objList = new ArrayList(); for(int i=0;rowNos!=null && i<rowNos.len

struts中的请求数据自动封装

Struts 2框架会将表单的参数以同名的方式设置给对应Action的属性中.该工作主要是由Parameters拦截器做的.而该拦截器中已经自动的实现了String到基本数据类型之间的转换工作.在struts中,默认使用拦截器 <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/> 进行请求数据自动封装,它会JSP中提交的

Struts2学习(二)——数据自动封装和自动传递

第一点:method属性学习 可以在一个action(MethodAction)里,定义多个方法method1().method2()(类比execute方法)返回String字符串. 再在package中写入与method对应的action请求url,在每个action标签里的result标签里name对应为返回的字符串作为接收, type属性默认为dispatcher,再返回JSP页面. 第二点:数据自动封装和自动传递 表单提交的属性值(name值)要与action里定义的属性(privat

struts基础3-把数据写入页面

一.OGNL(Object-Groph Navigation Language) 是一种强大的表达式语言,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能. 1)与EL表达式对比: OGNL对象图导航语言,比EL表达语言更强大:EL只能从域中获取数据,OGNL可以存取数据,可以调用对象的方法,获取struts的值栈的数据. 是第三方的表达式语言(但struts中自带OGNLjar包) 2)OGNL功能: 1.支持运算符(+-*/) 2.支持对象的方法调用,如x

Python黑客编程基础3网络数据监听和过滤

Python黑客编程3网络数据监听和过滤 课程的实验环境如下: •      操作系统:kali Linux 2.0 •      编程工具:Wing IDE •      Python版本:2.7.9 •      涉及到的主要python模块:pypcap,dpkt,scapy,scapy-http 涉及到的几个python网络抓包和分析的模块,dpkt和scapy在kali linux 2.0 中默认已经被安装,如果你的系统中没有需要手动安装一下,下面是软件包安装的简单说明. 在kali下

struts基础知识

1.框架 (1).是一系列jar包,其本质是对JDK功能的拓展. (2).框架是一组程序的集合,包含了一系列的最佳实践,作用是解决某一个领域的问题. 2.框架的作用:       框架强调的是软件的设计重用性和系统的可扩充性,以缩短大型应用软件系统的开发周期,提高开发质量.与传统的基于类库的面向对象重用技术比较,应用框架更注重于面向专业领域的软件重用 3.框架和设计模式的区别 有很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式.实际上它们完全是不同的概念. (1).  框架.设计

Struts2学习(二)———— 表单参数自动封装和参数类型自动转换

前篇文章对struts2的一个入门,重点是对struts2的架构图有一个大概的了解即可,之后的几篇文章,就是细化struts2,将struts2中的各种功能进行梳理,其实学完之后,对struts2的使用不外乎这几点,参数自动封装,拦截器的使用,数据校验,ognl表达(值栈和actionContext的讲解),struts2的标签,struts2的国际化,struts2的文件上传下载. 把这几个功能都学会了使用之后,struts2基本上就学完了.所以接下来的文章就是对这几个功能进行讲解.如何使用.