这个错误的分析在网上已经很多了,此处仅作为此次遇到的问题解决过程记录:
从客户提交的问题中完全无法想到任何问题所在,百度后发现可能是页面提交的FORM中某个值在Action中未定义,尝试在Action中的执行方法中断点,但无法进入。
再看百度结果,可以看到这个是在Struts验证的时候就返回了该错误。按照提示在自己的Action中重写了3个ActionSupport的方法:
1 public void addActionError(String anErrorMessage){ 2 String s=anErrorMessage; 3 System.out.println(s); 4 } 5 public void addActionMessage(String aMessage){ 6 String s=aMessage; 7 System.out.println(s); 8 } 9 public void addFieldError(String fieldName, String errorMessage){ 10 String s=errorMessage; 11 String f=fieldName; 12 System.out.println(s); 13 System.out.println(f); 14 }
再次通过页面提交,可以看到addFieldError中输出的错误属性名和错误原因。
通过这个方法找到了错误的元素,检查数据得到,该条数据与业务逻辑不符,传回值类型与之前定义的属性类型不一致,导致Struts验证不通过。