`

argument type mismatch异常

阅读更多

一,在action中:

        CustomerActionForm  caf =(CustomerActionForm)form;
        Customer customer = new Customer();
        BeanUtils.copyProperties(customer, caf);
        customerManager.addCustomer(customer, 0);

    出现了argument type mismatch异常,原因是由于,我的代码中有date类型,在提交时是作为String类型来提交的,无法自动转换为date类型导致的匹配不一致。

二,解决的方法一:(参考文章:浅析J2EE应用中的时间值字段的数据类型

                  引用地址:http://dev.yesky.com/44/2468044_1.shtml)

    在actionForm中设本为Date类型的为String,因为数据提交上来就是String类型

   ·CHAR类型日期

  由于User.expireDate也是String类型,因此,仅需要将 UserActionForm.expireDate属性完全拷贝到User中,然后再将User.expireDate属性的日期格式符"-"去除却 可,却将2006-06-06转换为20060606,对应操作逻辑的主要代码如下:

1. User user = new User();
2. //将userActionForm中的数据拷贝到user对象中
3. BeanUtils.copyProperties(user, userActionForm);
4. //将日期格式符去除,得到数据库存储 日期格式,如将2006-06-06转换为20060606
5. user.setExpireDate(user.getExpireDate().replace("-",""));
6. …
7. //调用服务对象,将user保存到T_USER中
8. userService.save(user);


  ·DATE类型日期

   在DATE类型日期方案中,由于PO User.expireDate属性为java.sql.Date,和UserActionForm.expireDate 存在类型的不匹配,因此需要通过一个转换函数,将String日期转换为java.sql.Date的日期。其主要代码如下:

1. User user = new User();
2. //由于expireDate不能直接进行拷贝,因此需要逐一拷贝属性
3. BeanUtils.copyPropertie(user, userActionForm,"userId");
4. BeanUtils.copyPropertie(user, userActionForm,"userName");
5. //使用转换函数str2Date()将String类型的时间转换为java.sql.Date的时间
6. java.sql.Date expireDate = str2Date(userActionForm.getExpireDate());
7. //设置expireDate属性
8. user.setExpireDate(expireDate);
9. …
10. //调用服务对象,将user保存到T_USER中
11. userService.save(user);


  通过上面的比较,可以看出,使用DATE时间方案比使用CHAR时间方案在添加数据的处理上要复杂一些,表现在:

   1) 由于属性名相同而类型存在不可直接转换的问题将导致无法进行对象间属性批量拷贝,即BeanUtils. copyProperties()批量属性拷贝函数会抛出异常,因此只能手工逐一进行单个具体属性的拷贝,如果属性个数很多,这一机械式的属性拷贝代码块 就要相应增大,不但使代码显示臃肿难看,而且直接降低了代码的可维护性,因为一但因表字段名改变,就需要手工调整这段代码。

  2) 需要提供一个将String日期串转换为java.sql.Date的转换函数,将年、月、日时间域分别从字串中抽取出来,并转换为int类型,然后利用 java.sql.Date(int year,int month,int date)构造函数得到对应的java.sql.Date对象

三,网上看了别人的总结

http://hi.baidu.com/hankers/blog/item/6b316c63a2ec4a640d33fa61.html/cmtid/d6035cb505a1acc636d3cae9

如下:

现象:
    当输入页面中含有日期如2008-01-01时,如果Form中对于的字段为Date类型,则会出现“argument type mismatch”错误。

原因:
    Struts的ActionServlet在接受到页面的请求后,会调用RequestUtils.populate方法对Form进行填值,而此方法又 调用到BeanUtils.populate方法,而该方法进行填值时对不同类型的会进行转换,而默认的ActionServlet并没有注册相应的转换 函数,所以会导致转换出现错误。

解决方法:
    1.Form中的日期类型使用String类型,在Action中自己处理类型转换(即在Action中对Form->POJO转换时手工处理)。
    2.Form中使用java.util.Date类型,自定义一个日期转换类DateConverter(需要实现Converter接口),然后在自定 义的ActionServlet或者Action基类中注册DateConverter:ConvertUtils.register(new DateConverter(), Date.class)。

分享到:
评论

相关推荐

    Cannot invoke setId on bean class 'class ' - argument type mismatch - had object

    标题 "Cannot invoke setId on bean class 'class ' - argument type mismatch - had object" 描述的是一个在使用Spring框架或者类似的依赖注入容器时常见的错误。这个错误通常发生在尝试通过容器设置一个对象属性,...

    Grails入门指南 中文版

    Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate和其它标准Java框架之上,从而为大家带来一套能实现超高生产力的一站式框架。 本书作者 Jason Rudolph 译者 陈俊 林...

    解决yolov3_object_tracking中loop of ufunc does not support argument 0 of type Tensor which has问题

    TypeError: loop of ufunc does not support argument 0 of type Tensor which has no callable arctan method 报错行 self.u = np.round(np.dot(self.F, self.u)) #或者 self.u = np.round(self.u + np.dot(K, ...

    javaweb编程中常见的异常及处理方法.doc

    本文将重点介绍一种常见的异常——`java.lang.IllegalArgumentException: argument type mismatch`,并详细解析其成因与解决策略。 #### 异常示例 在JavaWeb项目中使用Struts框架时,可能会遇到如下异常: ```java...

    升级keras解决load_weights()中的未定义skip_mismatch关键字问题

    load_weights(), got an unexpected keyword argument 'skip_mismatch' ``` 该错误表明`load_weights()`函数接收到一个它不认识的关键字参数`skip_mismatch`。这通常是由于当前使用的Keras版本较老,该版本的`load_...

    argument用法

    argument用法

    java上传文件资料

    - argument type mismatch`。这个问题通常发生在试图将某个对象(例如Date类型)设置到表单(Form)中,但对象类型与预期的不匹配。下面我们将详细探讨这个问题以及如何解决。 首先,当表单字段是Date类型,并且...

    GRE作文argument全部官方范文分析

    从给定的文件信息中,我们可以提炼出一系列与GRE作文Argument相关的知识点,这些知识点涵盖了Argument写作的核心要素、官方范文的价值以及写作策略。 ### Argument写作核心要素 1. **证据、支持或证明**(Evidence...

    Encountered-an-improper-argument问题方法

    keil升级5.25pre(临近几个...会提示Error: Encountered an improper argument 主要解决办法就是替换UV4.exe,可以将低版本中的UV4.exe直接替换 具体操作看:https://blog.csdn.net/u011624093/article/details/80880708

    OpenCV 报错“Unknown array type in function cvarrToMat” 并崩溃

    cvPutText() 函数内部调用 cvarrToMat() 函数时无法判断数据类型而主动抛出了异常。 2. 单步进入 cv::imdecode() 函数发现,该函数解析传入的图片数据时,需要调用 libpng 的 png_create_read_struct() 函数,而该...

    fragment argument

    "Fragment argument"是指将数据传递给Fragment的方式。在创建或实例化Fragment时,我们可能需要向其传递一些参数,以便在Fragment内部使用。这些参数通常以键值对的形式存储在一个Bundle对象中,然后通过...

    argument写作英文教程

    这是原汁原味的北美教程,教你如何写出美国人看着顺眼的argument

    简单粗暴写好argument

    ### 简单粗暴写好Argument:GRE写作攻略 #### 核心知识点解析: **1. 认识Argument** - **定义与目的**:GRE Argument部分要求考生针对一段论断进行批判性分析,评估其逻辑性和有效性。目的在于考察考生是否能够...

    c++ std::invalid_argument应用

    在C++编程中,`std::invalid_argument` 是一个异常类,用于表示当函数或方法接收到不合法或无效的参数时抛出的错误。这个类是`std::logic_error` 的子类,而`std::logic_error` 又是`std::exception` 的子类。`std::...

    µVISION: Error: Encountered an improper argument

    标题中的"µVISION: Error: Encountered an improper argument"是一个在使用Keil µVision集成开发环境时可能会遇到的问题提示。这个错误通常意味着在执行某些操作或者仿真过程中,软件遇到了无法识别或者不合法的...

    Argument分类--按错误类型

    在探讨GRE考试中的Argument部分时,我们关注的焦点在于识别并分析论证中的逻辑错误和漏洞。根据给定的文件信息,我们可以将Argument的错误类型大致分为以下几类:基于当前或过去条件推断未来状况、解决方案的充分性...

    TypeError object of type ‘type’ has no len()—Python报错问题:

    翻译过来是类型为“type”的TypeError对象没有len(),我报错的代码是: #coding=utf-8 print(请输入一个字符串:) a = input('') #回文的长度至少为2 if len(str) < 2: print('请不要输入空字符串!') a = ...

    Keil v5 Error: Encountered an improper argument 个人实测解决办法

    Keil v5 Error: Encountered an improper argument 个人实测解决办法 实测运行正常咯,再也不出现仿真关不了debug情况了

    问题完美解决 keil官网方法encounter an inmproper argument

    标题中的“问题完美解决 keil官网方法encounter an inmproper argument”指的是在使用MDK5(Microcontroller Development Kit)时遇到的一个特定错误:“encounter an improper argument”。这个错误通常出现在用户...

    java throw抛出异常实例二

    在这个例子中,`throw new IllegalArgumentException("Invalid argument")`创建了一个新的`IllegalArgumentException`对象,并用"Invalid argument"作为异常的详细信息。`throw`关键字随后将这个异常对象抛出,导致`...

Global site tag (gtag.js) - Google Analytics