2008-05-08
struts2的校验框架有问题还是我的代码有问题?
关键字: struts2 validation
问题是这样的,我在struts2的项目中,添加了validation的xml验证框架,自己认为自己的代码是没有问题的,也在网上搜了很多资料,有很多也遇到过像我一样的问题,都是都没有最后解决,以下是我的代码和配置文件,请大家帮忙看看到底是struts2的validation的bug,还是是我的代码或配置文件错了呢
UserAction
UserDao
struts.xml
补充:userAction和userDao都已经在springbean中定义
UserAction-UserLogin-validation.xml
JSP
在jsp中我使用的是服务器端认证,所以理论上来说,不论用户的用户名是否输对,都应该会去执行UserAction的login方法,但是事实上,并没有去执行,而是直接验证失败,在页面上显示验证失败的信息了。很奇怪,也很郁闷。因为如果我把UserAction-UserLogin-validation.xml从actin包中移除的话,其他配置和代码都不改,这样程序中提交的时候,就可以跳入UserAction的login方法, 这到底是为什么呢? 为什么加了这个校验文件之后,就无法执行action了??
UserAction
public class UserAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private UserDao userDao;
private String username;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public String login() throws Exception {
if (userDao.login(username, password)) {
return SUCCESS;
} else {
return INPUT;
}
}
}
UserDao
public class UserDao extends HibernateEntityExtendDao<User> {
public boolean login(String username,String password){
if(username==null)
return false;
if(username.equals("11")){
return true;
}else{
return false;
}
}
}
struts.xml
<struts> <constant name="struts.custom.i18n.resources" value="i18n.messageResource" /> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <constant name="struts.devMode" value="true" /> <package name="default" extends="struts-default"> <action name="UserLogin" class="userAction" method="login"> <result name="success">/index.jsp</result> <result name="input">/login.jsp</result> </action> </package> </struts>
补充:userAction和userDao都已经在springbean中定义
UserAction-UserLogin-validation.xml
<validators> <field name="username"> <field-validator type="requiredstring"> <message>000</message> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <message>22</message> </field-validator> </field> </validators>
JSP
<body>
<center>
<table>
<tr>
<td>
<s:form action="UserLogin!login">
<s:textfield name="username" label="%{getText('login.username')}" />
<s:textfield name="password" label="%{getText('login.password')}" />
<s:submit value="%{getText('login.btnSubmit')}" />
</s:form>
</td>
</tr>
</table>
</center>
</body>
在jsp中我使用的是服务器端认证,所以理论上来说,不论用户的用户名是否输对,都应该会去执行UserAction的login方法,但是事实上,并没有去执行,而是直接验证失败,在页面上显示验证失败的信息了。很奇怪,也很郁闷。因为如果我把UserAction-UserLogin-validation.xml从actin包中移除的话,其他配置和代码都不改,这样程序中提交的时候,就可以跳入UserAction的login方法, 这到底是为什么呢? 为什么加了这个校验文件之后,就无法执行action了??
评论
solarcult
2008-06-27
哈哈哈哈哈,楼主太懒了,和我一样,为了节约代码行,Action里没有写相应的 get Filed的方法. set()和get()是一对啊.不然检验没有方法得到其值,当然当作null了.
加上get就好了.
http://struts.apache.org/2.x/docs/faqs.html
加上get就好了.
http://struts.apache.org/2.x/docs/faqs.html
solarcult
2008-06-27
我也遇到这问题了,哪怕最简单的结构,也不成,总是返回错误.但是用code方式就可以.xml配置文件就不行.
实在搞不明白了,崩溃了,上面的方法也都用了.
感觉就是那个破xml验证没有从页面上得到我的field的数据值,就返回是验证错误的. Action能得到,xml得不到,郁闷死了.
不用这破玩意了,搞不明白.
实在搞不明白了,崩溃了,上面的方法也都用了.
感觉就是那个破xml验证没有从页面上得到我的field的数据值,就返回是验证错误的. Action能得到,xml得不到,郁闷死了.
不用这破玩意了,搞不明白.
zhou__hong2006
2008-06-05
配置文件的名称错了 是<action的文件名>--validation.xml
haikuo81
2008-05-27
runjia1987 写道
JSP 页面< form 加上 validate="true";
struts.xml 相应的action 配置中 添加<interceptor-ref name="validation" />
struts.xml 相应的action 配置中 添加<interceptor-ref name="validation" />
这个大哥说的很对!还有下面的错误
action级别的validate:UserAction-UserLogin-validation.xml ----〉 UserAction-validation.xml
method级别的validate: UserAction-UserLogin-validation.xml ----〉UserAction-login-validation.xml
还有就是页面需要一个出错误的<s:fielderror/>
这些都检查过没有问题的话,你的问题就解决了。
EXvision
2008-05-26
老实说,我个人对struts2的标签以及页面效验充满了反感。
根本不像struts2那么优雅。
(后台效验还是可以用用的,涉及到UI的。。实在。。。)
所以摒弃了,用jquer-validate。不知道多好用。
根本不像struts2那么优雅。
(后台效验还是可以用用的,涉及到UI的。。实在。。。)
所以摒弃了,用jquer-validate。不知道多好用。
freepig
2008-05-23
我看了下 楼主的贴出来的代码和页面应该没什么问题?
你能否把spring那个配置文件贴出来
看看你的UserAction是否是设置成scope="prototype",如果不是验证会有问题的
你能否把spring那个配置文件贴出来
看看你的UserAction是否是设置成scope="prototype",如果不是验证会有问题的
runjia1987
2008-05-23
JSP 页面< form 加上 validate="true";
struts.xml 相应的action 配置中 添加<interceptor-ref name="validation" />
struts.xml 相应的action 配置中 添加<interceptor-ref name="validation" />
mhhtj
2008-05-23
liuzongan 写道
<action name="UserLogin" class="userAction" method="login">
但提交不能用
<s:form action="UserLogin!login">
还应该用
<s:form action="login">
但提交不能用
<s:form action="UserLogin!login">
还应该用
<s:form action="login">
不是把? are you sure?
应该用 <s:form action="UserLogin.action">
liuzongan
2008-05-22
<action name="UserLogin" class="userAction" method="login">
但提交不能用
<s:form action="UserLogin!login">
还应该用
<s:form action="login">
但提交不能用
<s:form action="UserLogin!login">
还应该用
<s:form action="login">
victorxiang
2008-05-21
hapinwater 写道
校验文件名字错了,把验证名改成UserAction-login-validation.xml
struts2中验证配置文件 别名命名 来源于 action 中的name 对应的值
mo198682
2008-05-21
jgl,jbl,
liujq020
2008-05-21
如使用Struts2的<s:form>,还要加属性 validate="true" theme="ajax"
<head> 里 加<s:head/>
<head> 里 加<s:head/>
liujq020
2008-05-21
1、action 配置时加验证拦截器
2、action 应实现Preparable接口
2、action 应实现Preparable接口
hapinwater
2008-05-21
校验文件名字错了,把验证名改成UserAction-login-validation.xml
348105874
2008-05-21
UserActionValidate.xml
wing929
2008-05-20
验证文件名称错了!
nighthawk
2008-05-19
我们在做validation的时候其实只有提交的时候才需要验证,所以最好是指定某个方法执行的时候才使用validation,在这里的UserAction-UserLogin-validation.xml是针对整个ACTION的操作进行验证的,你不妨把UserAction-UserLogin-validation.xml改名,把UserLogin部分改成与<s:form action="">当中与action对应的名字试试.这样就保证你只有在提交的时候进行验证.
tianzhihua
2008-05-09
看看你的DAO吧,可能进action去,但你输入的用户名不是11所以一直错误
JavaFlasher
2008-05-08
引用
所以理论上来说,不论用户的用户名是否输对,都应该会去执行UserAction的login方法,
jakexu2008
2008-05-08
myoldman 写道
1.首先validation失败是不会执行action中的方法,而是直接返回name为input的result.
2.其次如果想确认是不是真的validation失败,可以result为input的页面上添加一个(对于楼主来说就是login.jsp)<s:fielderror/>查看到底是那个字段validation failure了.
2.其次如果想确认是不是真的validation失败,可以result为input的页面上添加一个(对于楼主来说就是login.jsp)<s:fielderror/>查看到底是那个字段validation failure了.
试过了,没有用的,
因为<s:fielderror/>只有当字段违反的校验规则时才会显示message ,
我定义了两个字段的校验规则是必填项,而当我在这两个字段上都输入了字符时,理论上说不应该再是校验失败,应该会去执行action,但是现在事实上程序并没有跳入action去执行,结果还是返回到了input
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 121 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
struts2的校验框架有问题 ...
哈哈哈哈哈,楼主太懒了,和我一样,为了节约代码行,Action里没有写相应的 g ...
-- by solarcult -
struts2的校验框架有问题 ...
我也遇到这问题了,哪怕最简单的结构,也不成,总是返回错误.但是用code方式就可 ...
-- by solarcult -
如何正确使用HQL进行查询 ...
为什么不用criteria?
-- by kaneg -
struts2的校验框架有问题 ...
配置文件的名称错了 是<action的文件名>--validation. ...
-- by zhou__hong2006 -
如何正确使用HQL进行查询 ...
这是spring提供的find方法,如果方法中定义了5个需要传入的参数,但是实际 ...
-- by dmewy






评论排行榜