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断点时发现,
这个函数根本就不会调用! 但是用局部却完全没事... |