论坛首页 Java版 Struts

struts2的校验框架有问题还是我的代码有问题?

浏览 4137 次
精华帖 (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了??
   
时间:2008-05-08
我用网上的代码练过一个,你下载看看:
http://www.box.net/shared/ohd8a6iw4g
   
0 请登录后投票
时间:2008-05-08
Struts2对validation的处理是在执行action之前,如果处理不成功,就不会执行action了
   
1 请登录后投票
时间:2008-05-08
JavenLiu 写道
Struts2对validation的处理是在执行action之前,如果处理不成功,就不会执行action了


首先感谢这位兄弟的回复

如果说validation的处理是在执行action之前,那么当我输入正确的条件时,也不会校验成功,页面还是停留在input的页面,这是为什么呢? 很不解。。。
   
0 请登录后投票
时间:2008-05-08
1.首先validation失败是不会执行action中的方法,而是直接返回name为input的result.
2.其次如果想确认是不是真的validation失败,可以result为input的页面上添加一个(对于楼主来说就是login.jsp)<s:fielderror/>查看到底是那个字段validation failure了.
   
1 请登录后投票
时间: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
   
1 请登录后投票
时间:2008-05-08
引用
所以理论上来说,不论用户的用户名是否输对,都应该会去执行UserAction的login方法,



   
0 请登录后投票
时间:2008-05-09
看看你的DAO吧,可能进action去,但你输入的用户名不是11所以一直错误
   
0 请登录后投票
时间:2008-05-19
我们在做validation的时候其实只有提交的时候才需要验证,所以最好是指定某个方法执行的时候才使用validation,在这里的UserAction-UserLogin-validation.xml是针对整个ACTION的操作进行验证的,你不妨把UserAction-UserLogin-validation.xml改名,把UserLogin部分改成与<s:form action="">当中与action对应的名字试试.这样就保证你只有在提交的时候进行验证.
   
0 请登录后投票
时间:2008-05-20
验证文件名称错了!
   
0 请登录后投票
论坛首页 Java版 Struts

跳转论坛:
JavaEye推荐