问题描述
比方说我有一个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>