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

解决方案 »

  1.   

    前台界面*********************************************<%@ page language="java" contentType="text/html; charset=GB18030"
        pageEncoding="GB18030"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>Insert title here</title>
    </head>
    <body>
    <p>这是一个struts的应用</p>
    <s:form method="post" action="Login2Action.action">
    <s:textfield name="cat" label="cat"></s:textfield><br>
    <s:textfield name="age" label="age"></s:textfield><br>
    <s:textfield name="name" label="name"></s:textfield><br><s:password name="password" label="password"></s:password><br>
    <s:submit value="submit" align="left" ></s:submit><br>
    </s:form>
    </body>
    </html>
    转换器类********************package com.struts2;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;public class CatConversion extends StrutsTypeConverter { @Override
    public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
    int x =0;
    Cat c = new Cat();

    if(null!=arg1[0] && ! "".equals(arg1[0])){
    try{
    x = Integer.parseInt(arg1[0]);
    }catch(NumberFormatException w){
    x = -1;

    }
    c.setAge(x);


    }else
    c.setAge(x);


    return c;
     


    } @Override
    public String convertToString(Map arg0, Object arg1) {
    Cat c = (Cat)arg1;

    return "这只猫的年龄是" + c.getAge();
    }}Action类***************************
    package com.struts2;import com.opensymphony.xwork2.ActionSupport;public class Login2Action extends ActionSupport {

    private String name;
    private String password;
    private String age;
    private Cat cat;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getPassword() {
    return password;
    }
    public void setPassword(String password) {
    this.password = password;
    }


    public String getAge() {
    return age;
    }
    public void setAge(String age) {
    this.age = age;
    }

    public Cat getCat() {
    return cat;
    }
    public void setCat(Cat cat) {
    this.cat = cat;
    }
    @Override
    public String execute() throws Exception {
    return SUCCESS;
    }

    public void validate() {
    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","cat is null");
    if(null==this.getCat())
    addFieldError("cat", "cat 字段的年龄输入有问题");

    }catch(Exception e){


    addFieldError("age", "输入有错误,请重新输入");


    }


    }
    }
    Login2Action-conversion.properties文件的内容cat=com.struts2.CatConversion
      

  2.   

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

  3.   

    java.lang.NoSuchMethodException: setAge([Ljava.lang.String;) 
    是cat还是action
      

  4.   

    ognl.MethodFailedException: Method "setAge" failed for object com.struts2.Login2Action@35e6e3 [java.lang.NoSuchMethodException: setAge([Ljava.lang.String;)]
      

  5.   

    你说的是不是前后矛盾啊,int不会也要转化器吧
      

  6.   

    前台界面********************************************* <%@ page language="java" 
    *******************************
    <s:form method="post" action="Login2Action.action">
    <s:textfield name="cat" label="cat"> </s:textfield> <br>*******************************
    </html> 如果你想表示猫的年龄的话应该用<s:textfield name="cat.age" label="cat"> </s:textfield>