zoukankan      html  css  js  c++  java
  • struts2 类型转化(typeConverter)

    当需要特定类型的参数时,需要类型转换.在某些情况下,要使用ModelDriven和Preparable接口,情况又有发生不同.

    struts2中的Action实现了ModelDriven和Preparable接口,Action的属性就要写明gett/sett方法,否则仍然不能转换成功

    类型转换的配置也分三种,Action,model,全.名称分别是:EmployeeAction-conversion.properties,Employee-conversion.properties,xwork-conversion.properties.其中EmployeeAction-conversion.properties中的内容也分两种写法,如

    #employee.birth=com.fengye.DateConverter
    #birth=com.fengye.DateConverter
    

     页面访问也会有

    <s:form name="save" action="emp_save" method="POST">
        <s:textfield name="name" label="username" ></s:textfield>
        <s:textfield name="birth" label="birth"></s:textfield>
        <s:submit label="submit" value="submit"/>
    </s:form>
    <s:form name="save" action="emp_save" method="POST">
        <s:textfield name="employee.name" label="username" ></s:textfield>
        <s:textfield name="employee.birth" label="birth"></s:textfield> 
       <s:submit label="submit" value="submit"/>
    </s:form>

    下面的表格列出了可能出现的结果(左侧代表了页面的访问方法,EmployeeAction/Employee/xwork代表了配置文件的位置,上方的第二行代表配置文件中的内容,如:employee.birth代表了

    在EmployeeAction-conversion.properties放置在EmployeeAction的同级目录下,并且内容为employee.birth=com.fengye.DateConverter)

    使用paramsPrepareParamsStack

     

    EmployeeAction

    Employee

    xwork

    employee.birth

    birth

    birth

    java.util.Date

    无异常

    转换

    无异常

    转换

    无异常

    转换

    无异常

    转换

    name="birth"

    "employee.birth"

    使用paramsPrepareParamsStack修改 PrepareInterceptor 拦截器的 alwaysInvokePrepare 属性值为 false

    EmployeeAction

    Employee

    xwork

    employee.birth

    birth

    birth

    java.util.Date

    无异常

    转换

    无异常

    转换

    无异常

    转换

    无异常

    转换

    name="birth"

    "employee.birth"

    使用默认拦截器defaultStack

    EmployeeAction

    Employee

    xwork

    employee.birth

    birth

    birth

    java.util.Date

    无异常

    转换

    无异常

    转换

    无异常

    转换

    无异常

    转换

    name="birth"

    "employee.birth"

    不使用ModelDriven

    EmployeeAction

    Employee

    xwork

    employee.birth

    birth

    birth

    java.util.Date

    无异常

    转换

    无异常

    转换

    无异常

    转换

    无异常

    转换

    name="birth"

    不能访问

    "employee.birth"

    public class DateConverter extends StrutsTypeConverter {
        public Object convertFromString(Map context, String[] values, Class toClass) {
            if (values != null && values.length > 0 && values[0] != null && values[0].length() > 0) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
                try {
                    return sdf.parse(values[0]);
                }
                catch(ParseException e) {
                    throw new TypeConversionException(e);
                }
            }
            return null;
        }
        public String convertToString(Map context, Object o) {
            if (o instanceof Date) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
                return sdf.format((Date)o);
            }
            return "";
        }
    }
  • 相关阅读:
    HDU 1058 Humble Numbers
    HDU 1421 搬寝室
    HDU 1176 免费馅饼
    七种排序算法的实现和总结
    算法纲要
    UVa401 回文词
    UVa 10361 Automatic Poetry
    UVa 537 Artificial Intelligence?
    UVa 409 Excuses, Excuses!
    UVa 10878 Decode the tape
  • 原文地址:https://www.cnblogs.com/fengyexjtu/p/4626655.html
Copyright © 2011-2022 走看看