Struts2-全局类型转换错误-AnnotationActionValidatorManager

Ethip 2008-10-21
我在做全局转换的时候,出现了问题。
如果采用局部转换,是没有错误的。
我的实例中,因为要转换多个相同类型的属性,用到泛型。

Console下的提示: 
com.opensymphony.xwork2.validator.ActionValidatorManagerFactory <clinit> 
信息: Detected AnnotationActionValidatorManager, initializing it... 



xwork-conversion.properties
org.ethip.sruts2.tutorial.bean.PointBean   
=org.ethip.sruts2.tutorial.converter.PointConverter 


index.jsp
<%@ page language="java" pageEncoding="UTF-8"%> 
<%@ taglib prefix="s" uri="/WEB-INF/struts-tags.tld"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
  <title>类型转换</title> 
</head> 
<body> 
  请输入点的坐标,以逗号隔开 
  <s:form action="pointConverter" method="post"> 
   <s:textfield name="point" label="点1的坐标" /> 
   <s:textfield name="point" label="点2的坐标" /> 
   <s:textfield name="point" label="点3的坐标" /> 
   <s:submit label="转换" /> 
  </s:form> 
</body> 
</html>



<%@ page language="java" pageEncoding="UTF-8"%> 
<%@ taglib prefix="s" uri="/WEB-INF/struts-tags.tld"%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
  <title>类型转换结果</title> 
</head> 
<body> 
  类型转换结果 
  <br> 
  坐标分别是: 
  <br> 
  <br> 
  <!-- point对应的是list --> 
  <s:property value="point" /> 
  <br> 
</body> 
</html> 


转换类
package org.ethip.sruts2.tutorial.converter;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;
import org.ethip.sruts2.tutorial.bean.PointBean;

public class PointConverter extends StrutsTypeConverter {
 @Override
 public Object convertFromString(Map arg0, String[] values, Class arg2) {
  // 向服务器端转化
  // 将对象数组转换成集合
  List<PointBean> list = new ArrayList<PointBean>();
  // 每一个value就是一个坐标的String类型表示
  for (String value : values) {
   PointBean point = new PointBean();
   String[] paramValues = value.split(",");
   int x = Integer.parseInt(paramValues[0]);
   int y = Integer.parseInt(paramValues[1]);
   point.setX(x);
   point.setY(y);
   list.add(point);
   System.out.println("x = " + x);
   System.out.println("y = " + y);
  }
  return list;
 }

 @Override
 public String convertToString(Map arg0, Object obj) {
  // 向客服端转化
  System.out.println("@@@");
  List<PointBean> list = (List<PointBean>) obj;
  StringBuilder builder = new StringBuilder();
  int i = 0;
  System.out.println("###");
  for (PointBean point : list) {
   ++i;
   int x = point.getX();
   int y = point.getY();
   System.out.println("x_q = " + x);
   System.out.println("y_q = " + y);
   builder.append("点 ").append(i).append(" 的坐标是").append(" x = ")
     .append(x).append(", y = ").append(y).append("; ");
  }
  return builder.toString();
 }
}


之前发在这个地方http://ethip.iteye.com/blog/254754
如果各位有空的话,麻烦帮我看看哦 ^_^
Ethip 2008-10-21
补充下,在Console下发现这样的提示:

com.opensymphony.xwork2.validator.ActionValidatorManagerFactory <clinit>
信息: Detected AnnotationActionValidatorManager, initializing it...

上述提示经常出现,下面的提示遇到过一次,
com.opensymphony.xwork2.util.ObjectTypeDeterminerFactory <clinit>
信息: Setting DefaultObjectTypeDeterminer as default ...


而浏览器下可以正确跳转到result.jsp,但显示的是null
引用
坐标分别是:
[null, null, null]


另外,我check下来的xwork的src中,没有ActionValidatorManagerFactory ,ObjectTypeDeterminerFactory 这两个类的源代码,不知怎么回事?
Ethip 2008-10-21
我在JE里也看多过好几篇写类型转换的例子,可惜没有找到我这个问题的答案
Ethip 2008-10-21
看见了一个网友类似的问题:

在用全局转换的时候,result.jsp输出的是[null, null,null]
而用局部转换的时候,result.jsp输出的是正常的

感觉似乎是在全局转换的时候,convertToString方法未被调用过。
satanest 2009-05-18
我的也是,在convertToString断点时发现,
这个函数根本就不会调用!
但是用局部却完全没事...
Global site tag (gtag.js) - Google Analytics