我按照网上的例子做了一个point的类型转换,没想到遇到了让人费解的异常...
index.jsp:
<s:form action="login">
     <s:textfield  name="point" label="point"/>
     <s:submit label="submit" align="center"/>
</s:form>然后在LoginAction里定义了一个Point point;设置好set,get方法第三步在LoginAction同一个包下(action包)建立:LoginAction-conversion.properties文件:
point=utils.PointConverter在utils包下建立PointConverter.javastruts.xml中这样配置:
   <package name="struts2" extends="struts-default">
   <action name="login" class="action.LoginAction">
   <result name="success">/result.jsp</result>
   <result name="input">/index.jsp</result>
   </action>
   </package>但是只要已提交index.jsp页面就返回当前页面并显示:
Invalid field value for field "point".后台报错:
2009-8-12 10:49:29 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: Error setting value
ognl.MethodFailedException: Method "setPoint" failed for object action.LoginAction@2d810f [java.lang.NoSuchMethodException: setPoint([Ljava.lang.String;)]我在PointConverter中写了一段
System.out.println("------------------------------");
测试,发现并没有进入
public Object convertValue(Map context, Object value, Class toType)这个方法....
求教!

解决方案 »

  1.   

    你后台程序写了相应的 ActionForm了吗?
      

  2.   

    struts2 不需要ActionForm啊:
    //----------------------
    //LoginAction:
    //-----------------------
    package action;import bean.Point;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport{
    private Point point;
    public Point getPoint() {
    return point;
    }
    public void setPoint(Point point) {
    this.point = point;
    }
    /**
     * 自动执行该函数
     */
    public String execute() throws Exception{
    return SUCCESS;
    }
    }
      

  3.   

    [java.lang.NoSuchMethodException: setPoint([Ljava.lang.String;)] 提示没有set方法?
      

  4.   

    传过来的是个字符串
    而你在action里面定义的是Point
    so it is wrong
      

  5.   

    贴出PointConverter类的代码吧,也许是转换方法名字写错了,没有转换直接把字符串赋值给了Point类
      

  6.   

    PointConverter  没有注册吧 自定义类型转换器需要注册的 不知道你相关的代码怎么写的?
      

  7.   

    谢谢各位关注,我的PointConverter.java:package utils;import java.util.Map;import ognl.DefaultTypeConverter;
    import bean.Point;public class PointConverter extends DefaultTypeConverter {
    /**
     * 类型转换
     */
    public Object convertValue(Map context, Object value, Class toType) {
    System.out.println("------------------------------");
    if(toType == Point.class){
    Point point=new Point();
    String[] str=(String[])value;
    String[] params=str[0].split(",");
    point.setX(Integer.parseInt(params[0]));
    point.setY(Integer.parseInt(params[1]));

    return point;
    }
    if(toType == String.class){
    Point point=(Point)value;
    return "x="+point.getX()+",y="+point.getY();
    }
    return null;
    }

    }
      

  8.   

    如果楼主没有更换struts2的默认的拦截器的话,这些配置应该没什么问题呀
      

  9.   

    我用的是最新版本,2.16好象是,我没动任何东西,用的lib都是从blank.war中拷贝过来的....
    common-uploadFiles
    common-io
    都拷贝过去了