写了一个pojo,使用@spring.validator声明validation的属性,然后运行ant clean webdoclet,应该在build/appfuse/WEB-INF/下面产生validation.xml,但运行时报如下的错误:
[webdoclet] Caused by: xdoclet.XDocletException: Running XDoclet failed.: xdocle
t.template.TemplateException: Invoking method in class xdoclet.modules.spring.Sp
ringValidatorTagsHandler failed: ifFormHasFields, line=52 of template file: jar:
file:/D:/javaworld/appfuse/lib/xdoclet-1.3-SNAPSHOT/xdoclet-spring-module-1.3-SN
APSHOT.jar!/xdoclet/modules/spring/resources/validation_xml.xdt, exception: null
[webdoclet] at xdoclet.XDocletTagSupport.generate(XDocletTagSupport.java:751
)
[webdoclet] at xdoclet.modules.spring.SpringValidatorTagsHandler.forAllForms
(SpringValidatorTagsHandler.java:78)
在网上查询类似的错误产生原因,如下:
更大可能是因为你的业务实体POJO类中,存在循环调用
如Aclass中包含Bclass,Bclass中包含Cclass,Cclass中包含Aclass,存在一个闭环,其中一个Class无一个是
@struts.validator type="required" (这个是在pojo中些的,Form中写法不一样)
特别是在一对一双向关系设计中,容易造成这种情况。
给闭环调用类中每个pojo类至少加上一个@struts.validator type="required" 就OK了
业务允许的话,把它设计为单向的或则采用@struts.form-field将关系filed不包含到ActionForm中
我的类确实有循环调用,而且是自己引用自己(类似于树的结点),写了上面的validator也没有
起作用,最后只好用数值引用来代替对象引用~~