问一个笨问题。当我为某个类配置了一个自定类型转化器以后,是不是struts2就不会对页面传过来的页面进行自动的类型转了

问题描述

比方说我有一个action里面有一个应用属性Cat和一个基本属性intage并且我配置的自定类型转化器。但是我只转换cat属性,可是运行的话,系统总是抛出异常500。java.lang.NoSuchMethodException:setAge([Ljava.lang.String;)但是如果我把相应的注册自定义转换器的文件删掉的话,就不会抛这个异常,并且会有默认提示Invalidfieldvalueforfield"age".但我输入的是一个字符的时候比如说a。

解决方案

解决方案二:
具体代码
解决方案三:
前台界面*********************************************<%@pagelanguage="java"contentType="text/html;charset=GB18030"pageEncoding="GB18030"%><%@taglibprefix="s"uri="/struts-tags"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=GB18030"><title>Inserttitlehere</title></head><body><p>这是一个struts的应用</p><s:formmethod="post"action="Login2Action.action"><s:textfieldname="cat"label="cat"></s:textfield><br><s:textfieldname="age"label="age"></s:textfield><br><s:textfieldname="name"label="name"></s:textfield><br><s:passwordname="password"label="password"></s:password><br><s:submitvalue="submit"align="left"></s:submit><br></s:form></body></html>转换器类********************packagecom.struts2;importjava.util.Map;importorg.apache.struts2.util.StrutsTypeConverter;publicclassCatConversionextendsStrutsTypeConverter{@OverridepublicObjectconvertFromString(Maparg0,String[]arg1,Classarg2){intx=0;Catc=newCat();if(null!=arg1[0]&&!"".equals(arg1[0])){try{x=Integer.parseInt(arg1[0]);}catch(NumberFormatExceptionw){x=-1;}c.setAge(x);}elsec.setAge(x);returnc;}@OverridepublicStringconvertToString(Maparg0,Objectarg1){Catc=(Cat)arg1;return"这只猫的年龄是"+c.getAge();}}Action类***************************packagecom.struts2;importcom.opensymphony.xwork2.ActionSupport;publicclassLogin2ActionextendsActionSupport{privateStringname;privateStringpassword;privateStringage;privateCatcat;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}publicStringgetAge(){returnage;}publicvoidsetAge(Stringage){this.age=age;}publicCatgetCat(){returncat;}publicvoidsetCat(Catcat){this.cat=cat;}@OverridepublicStringexecute()throwsException{returnSUCCESS;}publicvoidvalidate(){try{if(null==this.getName()||"".equals(this.getName().trim()))addFieldError("name","name不可以为空");if(null==this.getPassword()||"".equals(this.getPassword()))addFieldError("password","password不可以为空");if(null==this.getCat())addFieldError("cat","catisnull");if(null==this.getCat())addFieldError("cat","cat字段的年龄输入有问题");}catch(Exceptione){addFieldError("age","输入有错误,请重新输入");}}}Login2Action-conversion.properties文件的内容cat=com.struts2.CatConversion
解决方案四:
上面的Action类里的age是int类型的***************************
解决方案五:
java.lang.NoSuchMethodException:setAge([Ljava.lang.String;)是cat还是action
解决方案六:
ognl.MethodFailedException:Method"setAge"failedforobjectcom.struts2.Login2Action@35e6e3[java.lang.NoSuchMethodException:setAge([Ljava.lang.String;)]
解决方案七:
Login2Action发出的
解决方案八:
引用3楼wangxiaoning868的回复:

上面的Action类里的age是int类型的***************************

你说的是不是前后矛盾啊,int不会也要转化器吧
解决方案九:
前台界面*********************************************<%@pagelanguage="java"*******************************<s:formmethod="post"action="Login2Action.action"><s:textfieldname="cat"label="cat"></s:textfield><br>*******************************</html>如果你想表示猫的年龄的话应该用<s:textfieldname="cat.age"label="cat"></s:textfield>

时间: 2024-11-19 01:25:44

问一个笨问题。当我为某个类配置了一个自定类型转化器以后,是不是struts2就不会对页面传过来的页面进行自动的类型转了的相关文章

java-如何理解一个方法的参数为内嵌类

问题描述 如何理解一个方法的参数为内嵌类 如何理解一个方法的参数为内嵌类,能否举个例子,谢谢 解决方案 ListView控件里面有一个ListItem代表条目的内嵌类.ListView有一个add方法允许你添加条目到ListView中. 解决方案二: 比如 class ListView { class ListItem { } public void add(ListView.ListItem item) { ... } } 解决方案三: Bitmap类getPixels()方法中参数strid

C# 3.0新特性初步研究 Part4:使用集合类型初始化器

集合 集合类型初始化器(Collection Initializers) 想看一段"奇怪"的代码: 1class Program 2    { 3        static void Main(string[] args) 4        { 5            var a = new Point { x = 10, y = 13 }; 6            var b = new Point { x = 33, y = 66 }; 7 8            var

Access中出现改变字段“自动编号”类型,不能再改回来!

Access中出现改变字段"自动编号"类型,不能再改回来!(已解决) 一次把access中的自增字段改成了数值,再改回自增时,提示:在表中输入了数据之后,则不能将任何字段数据类型改为"自动编号"错误,解决方法: 1.先右键表,设计,打开字段设计状态. 2.把你要改的自增字段删除掉. 3.在最后面新增一个字段(与删除的字段同名),设为自动编号即可. 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/dat

CString和char* 类型转化

CString 是一种很有用的数据类型.它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多. 不管怎样,使用CString有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习. 1.CString 转化 成 char*(1) -- 强制类型转换为 LPCTSTR 这是一种略微硬性的转换,我们首先要了解 CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针.一个是该缓冲中有效的字符记数以及一个缓冲区长度. 有

详解Swift的类型检查器

本文讲的是详解Swift的类型检查器, 这篇文章将围绕曾不断使我重写代码的一些 Swift 编译器的报错信息展开: 错误:你的表达式太过于复杂,请将其分解为一些更为简单的表达式.(译者注:原文是error: expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions) 我会看那个触发错误的例子,谈谈以后由相

c++-C++可以在类中定义一个类吗?

问题描述 C++可以在类中定义一个类吗? 比如像下面这样: 解决方案 完全可以注意:内部类可以访问外部类的私有成员,外部类不能访问内部类的私有成员! 解决方案二: 可以呀,就像在结构体里申明结构体一样,不过好像通常不这样用. 解决方案三: 嵌套类的概念,相当于一个内部类. 解决方案四: 可以的,不过看起来比较别扭 解决方案五: 可以,嵌套类有以下性质: 一.**可见性**嵌套类对于外围类: 嵌套类仅仅是声明在外围类内部的类型,而不是外围类的成员 外围类不具备嵌套类所定义的成员 对于外围类来说,嵌

visual studio 2010-VS2010 MFC一个自定义类如何调用一个对话框类中的成员变量

问题描述 VS2010 MFC一个自定义类如何调用一个对话框类中的成员变量 我从一个对话框定义了几个CString类型的edit控件,我现在写一个类想调用该对话框中的创建的edit控件变量.怎么办啊 解决方案 字符串: getdlgitem(id)->getwindowtext() 数字 getdlgitemid(id) 解决方案二: 把那个对话框的CString变量变成public的,然后就可以直接用了,当然你需要先知道你那个对话框的指针. 解决方案三: 黑马程序员---定义一个包含私有成员变

c语言-求一个关于C语言中有关文件和链表的一个程序

问题描述 求一个关于C语言中有关文件和链表的一个程序 我们老师布置了一道题:有A和B两个文件夹,每个文件夹下面都有若干子目录.但是 不知道目录里面文件的类型和具体的文件数目.现在要创建一个C文件夹,对C文件夹 的要求是:(1)C文件夹下面子目录的文件名和文件长度是A的,打开的内容是B的( 打开之后只要内容是B的,不要求内容完整与否).(2)通过键入命令或是其他方式 C文件夹可以直接恢复到B文件夹.要求使用链表完成. 我们老师只把题目说了这些,他说对A.B文件夹的定义让我们自己讨论吧.能实现他所

“一个只有行为,没有属性的类是线程安全的” 请问各位这句话对吗?请举出实例。

问题描述 "一个只有行为,没有属性的类是线程安全的" 请问各位这句话对吗?一直在迷惑中.请详细解释下,谢谢. 问题补充:牟盖东 写道 解决方案 引用请如果将这个类设计为单例的工具类,其中的方法都为静态的.然后其他的类使用这些方法处理数据,或者通过这些方法获取资源,是否会出现线程问题呢? 正如之前说过的:引用而作为一个线程中的临时变量使用的话,这个类去访问别的共享数据仍然是能产生共享冲突的. 完全有可能出现,关键在于共享数据上.阁下问这样的问题,相比也是多线程程序没有写过多少.需要好好体