struts2 validator验证随笔

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

环境:eclipse-jee-galileo-SR2-win32+apache-tomcat-6.0.18+struts-2.3.14

最近学习struts2框架,就在此随笔谢谢,如有不足,请各位赐教。

1.工程出现下面错误:

2013-6-2 20:28:15 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: No configuration found for the specified action: 'loginRegister' in namespace: '/'. Form action defaulting to 'action' attribute's literal value.

首先检查jsp中form标签里action和struts.xml里配置的action名是否相同。如果名相同的话,确认是否在相应的namespace下。如果不在同一个域名下,就在form标签里加上namespace="/xx"(xx对应struts.xml里定义的namespace值),如未指定,struts2会默认从根命名空间"/" 搜索action。

需要注意的一点是出现这样的问题,有可能是因为你在标签里配置action时添加了.action,在中,这个.action不需要由我们手工添加,struts2会自动为你完成这个工作,在jsp页面查看源码可以看到。

2.标签在出现error回显时,失效。

标签的含义是将表单中的值设置成初始值,而不是单纯的清空。这一点要注意,也是出现这个问题的根本所在,在出现error后,跳回输入界面,里的各个标签里面都是有值的,所以你不能设置他们为空,如果不走action,只能手动在标签上写js解决了。

3.使用标签出现下面error

org.apache.jasper.JasperException: tag 'radio', field 'list', name 'usex': The requested list key '#{0:'保密',1:'男',2:'女'}' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]

这个问题纠结了很长时间,这样写jsp不需要冲后台得到集合,怎么还会报出这个message呢?查了各种资料都解决不了,其实还是细节问题,我把别人的代码拷来执行就没有问题,怎么运行这个就有问题了,仔细检查下来,发现有一个全角的冒号在里面...

另外如果下面这样使用标签,也会出现这样的错误:

那是因为没有走action(validator没有通过,返回界面),或者走了action却没有对这个集合进行初期化,直接解决的方法是初期 化list的工作放到prepare拦截器中,因为prepare是在validate拦截器之前执行,即实现prepareble接口。

public class LoginRegister extends ActionSupport implements Preparable {
...
@Override
public void prepare() throws Exception {
	List sexList = new ArrayList();
        ...
	ActionContext.getContext().put("sexList", sexList);
}


需要说明的是标签里的属性listKey,listValue是dto里的两个属性,list属性对应的是这个dto的集合。如果想回显选中的值,只需将value属性的值设置成与name值一样就可以了,但是这样在画面初期化的时候就不会有值了,如果想在初期化选中某个值的话,只需要将value属性的的值设置成对应的值就行了(value="3"),但这样又不能回显被选中的值了,如何两者兼顾了...

4.在struts2进行自定义的类型转换时,将string装换成int类型会出现下面的错误:

警告: Error setting expression 'uage' with value '[Ljava.lang.String;@4fe91e'
ognl.MethodFailedException: Method "setUage" failed for object action.LoginRegister@87e704 [java.lang.NoSuchMethodException: action.LoginRegister.setUage([Ljava.lang.String;)]

如果将int换成Integer就没有问题了,不知是什么原因造成这样的问题。

5.另外还遇到一些,还没有解决,路过的大神可要帮帮呀...

跑validator的时候,出现下面的问题:

5.1出现下面的警告。

2013-6-2 21:26:02 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: Got result of null when trying to get Boolean.

5.2LoginRegister-validation.xml中的正规表达式没有起作用,如下:


	
	${getText("name.rule")}
整个 LoginRegister-validation.xml文件如下:





	
		
	
	
	
		
		${getText("name.rule")}
	



	
		${getText("password.required")}
	
	
	
		
		${getText("password.rule")}
	



	
		${getText("repassword.required")}
	
	
		
		6
		20
		${getText("repassword.rule")}
	
	
		
		${getText("repassword.equal")}
	



	
		0
		120
		${getText("age.rule")}
	



	
		${getText("email.rule")}
	



	
		
		
	

资源文件:messageResource_zh_CN.properties

age.rule=年龄必须在${min}至${max}之间
birth.rule=出生日期必须在1900-01-01至2012-01-01之间
email.rule=请输入有效的电子邮箱格式
password.required=必须输入密码
password.rule=密码长度必须在6至20之间
repassword.required=必须输入确认密码
repassword.equal=密码与确认密码必须一致
repassword.rule=确认密码格式必须在6至20之间
name.required=必须输入用户名
name.rule=用户名的长度必须在6至20之间
phone.rule=电话号码为13位

参考资料:

http://80eye.diandian.com/post/2010-05-25/17206015

http://bbs.csdn.net/topics/110118066

http://www.blogjava.net/landor2004/archive/2009/04/11/265016.html

http://blog.csdn.net/greencacti/article/details/7170086

http://wenku.baidu.com/view/e65397acd1f34693daef3ec6.html

讨论帖:

http://www.oschina.net/question/1050450_113121

感谢热心的前辈!!本文如有不正,请指出。

以上。

转载于:https://my.oschina.net/wangbiglei/blog/135170

你可能感兴趣的:(struts2 validator验证随笔)