zoukankan      html  css  js  c++  java
  • struts2类型转化器详解(带例子)

    Struts2有两种类型转化器:

    一种局部,一种全局.

     

    如何实现:

    第一步:定义转化器

    第二部:注册转化器

     

     

    下面做一个局部类型转化器的实例。

    我们在上面一片日志说过有个变量date类型的。只有我们输入格式为yyyy-MM-dd的日期类型才会有效。否则则无效。那么我就需要一个类型转化当输入为yyyy-MM-dd的日期类型也能有效,该怎么做?

    这时候我们需要一个自定义的类型转化器。

    首先我们定义一个类型转化器

    我们的类为:DateTypeChange.java

    package com.fish;

     

     

    import java.text.SimpleDateFormat;

    import java.util.Date;

    import java.util.Map;

     

    import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

     

    publicclass DateTypeChange extends DefaultTypeConverter{//首先得继承默认转化器类

     

        @Override

        public Object convertValue(Map<String, Object> context, Object value,

                Class toType) {//第二个参数是你的要转化的数据就是我们下面test.Javabrithday属性的值,第三个参数是你传进来的数的值

            SimpleDateFormat format=new  SimpleDateFormat("yyyyMMdd");//创建一个日期类型的排版格式。

            try {

                if(toType==Date.class){

                    String[] parm=(String[])value;

                    return format.parse(parm[0]);

                }elseif(toType==String.class){

                    Date date=(Date)value;

                    return format.format(date);

                }

            } catch (Exception e) {

               

            }

           

            returnnull;

        }

     

     

    }

    类型转化器书写完毕,接着应该写一个注册文件关联类型转化器和你想转化属性的那个类(这个文件写在转化器的同一个包下)

    书写格式:“要转化的属性的类型(不加包名)”+conversion.properties

    文件里面写:brithday=com.fish.DateTypeChange 

     

    顺便把其他几个test.Java也写上:

    package com.fish;

     

    import java.util.Date;

     

     

    publicclass Test {

    private String name;

    private String id;

    private Date brithday;

     

    public Date getBrithday() {

        returnbrithday;

    }

    publicvoid setBrithday(Date brithday) {

        this.brithday = brithday;

    }

    public String getName() {

        returnname;

    }

    publicvoid setName(String name) {

        this.name = name;

    }

    public String getId() {

        returnid;

    }

    publicvoid setId(String id) {

        this.id = id;

    }

    public String execute(){

       

        return"success";

    }

    }

    接着:Struts2.xml

    <package name="fish" namespace="/test" extends="struts-default">

    <action name="redfish" class="com.fish.Test" method="execute">

    <param name="name">xxxx</param>

    <result  name="success">/index.jsp</result>

    </action>

    然后:MyJsp.JSP

    <form action="/struts2test4/test/redfish.action">&nbsp;

        <input type="text"  name="username">

        <input type="text" name="id">

        <input type="text" name="brithday">

    <input type="submit" value="确定">

     

    最后:index.JSP

    name=${name}<br>

      id= ${id}  <br>

     brithday=${brithday}<br>

     

    这时我们在index.JSP页面中输入yyyyMMdd类型的日期类型时,struts2也能转化成日期格式处理了。

     

     

    当然如果你想写全局转化器。

    只要改properties文件:

    将他移动到web-inf/classess下,命名是

    xwrok-conversion.properties

    在里面的内容:

    转化的类型(有包名的)=转化器(包名的)

    所以是这么写

    Java.util.Date=com.fish.DateTypeChange

    意思是说对于所有date类型我都可以转化为这种格式处理。 

  • 相关阅读:
    C#中的委托和事件(续)【来自张子扬】
    C# 中的委托和事件[转自张子扬]
    .NET多线程编程入门
    python——configparser模块
    logger模块
    python——time模块
    os模块
    python——re模块
    selenium环境搭建
    iOS中的三大定时器
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3188605.html
Copyright © 2011-2022 走看看