浏览 193 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-05-08 关键字: struts2 validation
问题是这样的,我在struts2的项目中,添加了validation的xml验证框架,自己认为自己的代码是没有问题的,也在网上搜了很多资料,有很多也遇到过像我一样的问题,都是都没有最后解决,以下是我的代码和配置文件,请大家帮忙看看到底是struts2的validation的bug,还是是我的代码或配置文件错了呢
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了?? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
| 返回顶楼 | |
|
时间:2008-05-08
我用网上的代码练过一个,你下载看看:
http://www.box.net/shared/ohd8a6iw4g |
|
| 返回顶楼 | |
|
时间:2008-05-08
Struts2对validation的处理是在执行action之前,如果处理不成功,就不会执行action了
|
|
| 返回顶楼 | |
|
时间:2008-05-08
JavenLiu 写道 Struts2对validation的处理是在执行action之前,如果处理不成功,就不会执行action了
首先感谢这位兄弟的回复 如果说validation的处理是在执行action之前,那么当我输入正确的条件时,也不会校验成功,页面还是停留在input的页面,这是为什么呢? 很不解。。。 |
|
| 返回顶楼 | |
|
时间:2008-05-08
1.首先validation失败是不会执行action中的方法,而是直接返回name为input的result.
2.其次如果想确认是不是真的validation失败,可以result为input的页面上添加一个(对于楼主来说就是login.jsp)<s:fielderror/>查看到底是那个字段validation failure了. |
|
| 返回顶楼 | |
|
时间:2008-05-08
myoldman 写道 1.首先validation失败是不会执行action中的方法,而是直接返回name为input的result.
2.其次如果想确认是不是真的validation失败,可以result为input的页面上添加一个(对于楼主来说就是login.jsp)<s:fielderror/>查看到底是那个字段validation failure了. 试过了,没有用的, 因为<s:fielderror/>只有当字段违反的校验规则时才会显示message , 我定义了两个字段的校验规则是必填项,而当我在这两个字段上都输入了字符时,理论上说不应该再是校验失败,应该会去执行action,但是现在事实上程序并没有跳入action去执行,结果还是返回到了input |
|
| 返回顶楼 | |
|
时间:2008-05-08
引用 所以理论上来说,不论用户的用户名是否输对,都应该会去执行UserAction的login方法,
|
|
| 返回顶楼 | |
|
时间:2008-05-09
看看你的DAO吧,可能进action去,但你输入的用户名不是11所以一直错误
|
|
| 返回顶楼 | |






