1、struts验证数据校验也称为输入校验,指导对用户的输入进行基本的过滤,包括必填的字段,字段必须为数字及两次输入的密码必须匹配等。本文重点介绍了struts的校验框架。 1、struts的数据校验大致有如下几种方式: 1. ActionForm的代码校验 2. Action里的代码校验 3. 结合commons-validator.jar的校验 1.1 ActionForm的代码校验 ActionForm的代码校验是最基本的校验方式。这种校验方式是重写ActionForm的validate方法,在该方法内对所有的字段进行基本的校验。如果出现不符合要求的输出,则将出错提示封装在ActionErr
2、or对象里,最后将多个ActionError组合成ActionErrors对象,给对象里封装了全部的出错信息。 以登陆页面为例,下面是重写了Validate方法的ActionForm的代码: Java代码 1. importjavax.servlet.http.HttpServletRequest; 2. 3. importorg.apache.struts.action.ActionError; 4. importorg.apache.struts.action.ActionErrors; 5. importorg.apache.struts.action.ActionForm; 6. im
3、portorg.apache.struts.action.ActionMapping; 7. 8. publicclassLoginActionFormextendsActionForm 9. 10. privatestaticfinallongserialVersionUID=1L; 11. privateStringusername; 12. privateStringpassword; 13. 14. publicStringgetUsername() 15. returnusername; 16. 17. publicvoidsetUsername(Stringusername) 18
4、. this.username=username; 19. 20. publicStringgetPassword() 21. returnpassword; 22. 23. publicvoidsetPassword(Stringpassword) 24. this.password=password; 25. 26. 27. /重写validate方法,完成数据校验 28. SuppressWarnings(deprecation) 29. Override 30. publicActionErrorsvalidate(ActionMappingmapping, 31. HttpServl
5、etRequestrequest) 32. /ActionErrors用于包装所有的出错信息 33. ActionErrorserrors=newActionErrors(); 34. /如果用户名为空 35. if(username=null)|(username.equals() 36. /error.username对应资源文件中的key,用户名是对应资源文件的第一个参数 property 0 137. errors.add(username,newActionError(error.username,用户名); 38. 39. /如果密码为空 40. if(password=null)
6、|(password.equals() 41. errors.add(password,newActionError(error.password,密码); 42. 43. /返回封装了所有的出错信息 44. returnerrors; 45. 46. import javax.servlet.http.HttpServletRequest;import org.apache.struts.action.ActionError;import org.apache.struts.action.ActionErrors;import org.apache.struts.action.ActionF
7、orm;import org.apache.struts.action.ActionMapping;public class LoginActionForm extends ActionForm private static final long serialVersionUID = 1L; private String username; private String password; public String getUsername() return username; public void setUsername(String username) this.username = u
8、sername; public String getPassword() return password; public void setPassword(String password) this.password = password; /重写validate方法,完成数据校验 SuppressWarnings(deprecation) Override public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) /ActionErrors用于包装所有的出错信息 ActionErrors e
9、rrors = new ActionErrors(); /如果用户名为空 if(username = null)|(username.equals() /error.username对应资源文件中的key,用户名是对应资源文件的第一个参数 errors.add(username, new ActionError(error.username,用户名); /如果密码为空 if(password = null )|(password.equals() errors.add(password, new ActionError(error.password,密码); /返回封装了所有的出错信息 ret
10、urn errors; 在JSP页面中值需要更改一处即可*之间的部分: Jsp代码 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 请输入用户名和密码: 18. 19. : 20. 21. : 22. 23. 24. 25. 26. 27. 28. 29. 请输入用户名和密码: : : 由于在本项目中用到了资源文件,因为有了资源文件的支持,JSP页面只需要简单的标签就可以生成全部的出错信息,下面是资源文件: 资源文件代码 1. #-standarderrors- 2. username=用户名 3. password=密码
11、4. login=登陆 5. noname=请输入用户名,然后在登陆 6. nopassword=请输入密码,然后在登陆 7. #html:errors将自动加载errors.header作为出错提示标题 8. errors.header=验证出错你必须按以下提示修改你的输入才能继续. 9. error.username=0必须填写. 10. error.password=0必须填写. 11. #html:errors将自动加载errors.footer作为出错的最后一行 12. errors.footer=你完成上面提示部分# - standard errors -username=用户名p
12、assword=密码login=登陆noname=请输入用户名,然后在登陆nopassword=请输入密码,然后在登陆#html:errors将自动加载errors.header作为出错提示标题errors.header=验证出错你必须按以下提示修改你的输入才能继续.error.username=0 必须填写.error.password=0 必须填写.#html:errors将自动加载errors.footer作为出错的最后一行errors.footer=你完成上面提示部分注:上述资源文件还不能直接在项目中应用,在使用前需要转换成unicode格式。 命令:native2ascii Mess
13、ageResources_zh_CN.properties MessageResources.properties 以上是使用ActionForm进行数据验证的方法,但是使用ActionForm的数据验证有个显著的问题:ActionErrors和ActionError都是struts不在推荐使用的类,因此,应尽量避免使用这种验证方法。 1.2 Action的代码验证 在Action里通过代码完成输入验证,是最基本,也是最容易使用的方法。与当初的MVC设计相似,在调用业务逻辑组件之前,先对数据进行基本的验证,这是最传统也是最原始的方法。 在Action里面完成数据验证,实际上就是在execute
14、方法前面增加数据验证的部分代码。下面是增加了数据验证Action代码: Java代码 1. importjava.sql.ResultSet; 2. 3. importjavax.servlet.http.HttpServletRequest; 4. importjavax.servlet.http.HttpServletResponse; 5. 6. importorg.apache.struts.action.Action; 7. importorg.apache.struts.action.ActionForm; 8. importorg.apache.struts.action.Act
15、ionForward; 9. importorg.apache.struts.action.ActionMapping; 10. 11. import.newcom.dao.DbDao; 12. 13. publicclassLoginActionextendsAction 14. 15. Override16. /必须重写核心方法,该方法负责处理用户的请求 17. publicActionForwardexecute(ActionMappingmapping,ActionFormform, 18. HttpServletRequestrequest,HttpServletResponsere
16、sponse) 19. throwsException 20. /解析用户请求参数 21. LoginActionFormlaf=(LoginActionForm)form; 22. Stringusername=laf.getUsername(); 23. System.out.println(您输入的用户名是:+username); 24. Stringpassword=laf.getPassword(); 25. /出错提示 26. 27. /完成服务器端的校验 28. /ActionErrors用于包装所有的出错信息 29. ActionMessageserrors=newAction
17、Messages (); 30. /如果用户名为空 31. if(username=null)|(username.equals() 32. /error.username对应资源文件中的key,用户名是对应资源文件的第一个参数 property 0 133. errors.add(username,newActionMessages(error.username,用户名); 34. 35. /如果密码为空 36. if(password=null)|(password.equals() 37. errors.add(password,newActionMessages(error.passw
18、ord,密码); 38. 39. 40. / saveErrors(errors,request);41. saveMessages(errors,request);42. retun mapping.findForword(“shibai”);43. 44. 45. import java.sql.ResultSet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import or
19、g.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import .newcom.dao.DbDao;public class LoginAction extends Action Override /必须重写核心方法,该方法负责处理用户的请求 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServ
20、letRequest request, HttpServletResponse response) throws Exception /解析用户请求参数 LoginActionForm laf = (LoginActionForm)form; String username = laf.getUsername(); System.out.println( 您输入的用户名是:+username); String password = laf.getPassword(); /出错提示 String errMsg = ; / 完成服务器端的校验 if (username = null | username.equals() errMsg += 您的用户名丢失或没有输入,请重新输入!; else if (password = null | password.equals() errM
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1