博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2 validator验证随笔
阅读量:5939 次
发布时间:2019-06-19

本文共 3794 字,大约阅读时间需要 12 分钟。

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。

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

2.<s:reset>标签在出现error回显时,失效。

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

3.使用<s:radio>标签出现下面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 {...@Overridepublic 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位

参考资料:

讨论帖:

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

以上。

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

你可能感兴趣的文章
广平县北方计算机第一届PS设计大赛
查看>>
深入理解Java的接口和抽象类
查看>>
java与xml
查看>>
Javascript异步数据的同步处理方法
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
基于事件驱动的DDD领域驱动设计框架分享(附源代码)
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
度量时间差
查看>>
apache prefork模式优化错误
查看>>
jmeter高级用法例子,如何扩展自定义函数
查看>>
通过jsp请求Servlet来操作HBASE
查看>>
JS页面刷新保持数据不丢失
查看>>
清橙A1202&Bzoj2201:彩色圆环
查看>>
使用data pump工具的准备
查看>>
springMVC---级联属性
查看>>
get和post区别
查看>>
crontab执行shell脚本日志中出现乱码
查看>>