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 "";
        }
    }
  • 相关阅读:
    [LeetCode]题解(python):094-Binary Tree Inorder Traversal
    [LeetCode]题解(python):093-Restore IP Addresses
    [LeetCode]题解(python):092-Reverse Linked List II
    [LeetCode]题解(python):091-Decode Ways
    第二阶段团队冲刺1
    进度总结报告十三
    梦断代码阅读笔记02
    第一阶段对各组的意见评价
    进度总结报告十二
    软件开发冲刺10
  • 原文地址:https://www.cnblogs.com/fengyexjtu/p/4626655.html
Copyright © 2011-2022 走看看