struts2 验证框架

淩亂°似流年 2022-06-04 00:29 351阅读 0赞

重写ActionSupport类的validate()方法 , 进行手动验方式

做一个表单, 提交用户名和密码到action, 并加上<s:fielderror></s:fielderror>标签作为错误信息的打印

  1. <body>
  2. <s:fielderror></s:fielderror>
  3. <s:form action="user_login">
  4. <s:textfield name="name" label="用户名"></s:textfield>
  5. <s:textfield name="pwd" label="密码"></s:textfield>
  6. <s:submit value="登录"></s:submit>
  7. </s:form>
  8. </body>

struts.xml采用通配符方式:

  1. <struts>
  2. <package name="demo" extends="struts-default" namespace="/">
  3. <action name="user_*" class="from.From1Action" method="{1}">
  4. <result name="success">success.jsp</result>
  5. <result name="input">index.jsp</result>
  6. </action>
  7. </package>
  8. </struts>

在action中实现validate()方法, 在此方法中写验证代码, 并将错误的信息通过addFieldErro()方法保存,错误信息可以通过<s:fielderror></s:fielderror>输出到前台界面上

  1. public class From1Action extends ActionSupport {
  2. String name;
  3. String pwd;
  4. public String login(){
  5. return Action.SUCCESS;
  6. }
  7. //实现验证
  8. @Override
  9. public void validate() {
  10. System.out.println("jsss"+name+pwd);
  11. if (name == null || "".equals(name.trim())){
  12. this.addFieldError("nameMsg", "用户名不能为空");
  13. }else{
  14. Pattern p = Pattern.compile("\\w{6,20}");
  15. Matcher m = p.matcher(name.trim());
  16. if (!m.matches()){
  17. this.addFieldError("nameMsg", "用户格式错误");
  18. }
  19. }
  20. if (pwd == null || "".equals(pwd.trim())){
  21. this.addFieldError("pwdMsg", "密码不能为空");
  22. }else{
  23. int len = pwd.trim().length();
  24. if (len <6 || len >30){
  25. this.addFieldError("pwdMsg", "密码在6-30之间");
  26. }
  27. }
  28. }
  29. public String getName() {
  30. return name;
  31. }
  32. public void setName(String name) {
  33. this.name = name;
  34. }
  35. public String getPwd() {
  36. return pwd;
  37. }
  38. public void setPwd(String pwd) {
  39. this.pwd = pwd;
  40. }
  41. }

验证:
这里写图片描述

有时候action类中不只是处理一个表单, 有可能是多个, 这时候用validateXxx 的方法进行验证,添加一个注册的jsp界面如下:

  1. <body>
  2. <s:fielderror></s:fielderror>
  3. 注册
  4. <s:form action="user_reg">
  5. <s:textfield name="name" label="用户名"></s:textfield>
  6. <s:textfield name="pwd" label="密码"></s:textfield>
  7. <s:submit value="登录"></s:submit>
  8. </s:form>
  9. </body>

下面的action就可以同时验证注册和登录的两个表单

  1. public class From1Action extends ActionSupport {
  2. String name;
  3. String pwd;
  4. public String login(){
  5. return Action.SUCCESS;
  6. }
  7. public String reg(){
  8. return Action.SUCCESS;
  9. }
  10. //实现登录验证
  11. public void validateLogin() {
  12. System.out.println("jsss"+name+pwd);
  13. if (name == null || "".equals(name.trim())){
  14. this.addFieldError("nameMsg", "用户名不能为空");
  15. }else{
  16. Pattern p = Pattern.compile("\\w{6,20}");
  17. Matcher m = p.matcher(name.trim());
  18. if (!m.matches()){
  19. this.addFieldError("nameMsg", "用户格式错误");
  20. }
  21. }
  22. if (pwd == null || "".equals(pwd.trim())){
  23. this.addFieldError("pwdMsg", "密码不能为空");
  24. }else{
  25. int len = pwd.trim().length();
  26. if (len <6 || len >30){
  27. this.addFieldError("pwdMsg", "密码在6-30之间");
  28. }
  29. }
  30. }
  31. //实现注册验证
  32. public void validateReg() {
  33. System.out.println("jsss"+name+pwd);
  34. if (name == null || "".equals(name.trim())){
  35. this.addFieldError("nameMsg", "用户名不能为空");
  36. }else{
  37. Pattern p = Pattern.compile("\\w{6,20}");
  38. Matcher m = p.matcher(name.trim());
  39. if (!m.matches()){
  40. this.addFieldError("nameMsg", "用户格式错误");
  41. }
  42. }
  43. if (pwd == null || "".equals(pwd.trim())){
  44. this.addFieldError("pwdMsg", "密码不能为空");
  45. }else{
  46. int len = pwd.trim().length();
  47. if (len <6 || len >30){
  48. this.addFieldError("pwdMsg", "密码在6-30之间");
  49. }
  50. }
  51. }
  52. public String getName() {
  53. return name;
  54. }
  55. public void setName(String name) {
  56. this.name = name;
  57. }
  58. public String getPwd() {
  59. return pwd;
  60. }
  61. public void setPwd(String pwd) {
  62. this.pwd = pwd;
  63. }
  64. }

因为有错误信息返回的是“input”转向的jsp不同, 所以还要修改struts.xml

  1. <struts>
  2. <package name="demo" extends="struts-default" namespace="/">
  3. <action name="user_login" class="from.From1Action" method="login">
  4. <result name="success">success.jsp</result>
  5. <result name="input">index.jsp</result>
  6. </action>
  7. <action name="user_reg" class="from.From1Action" method="reg">
  8. <result name="success">success.jsp</result>
  9. <result name="input">reg.jsp</result>
  10. </action>
  11. </package>
  12. </struts>

验证:
这里写图片描述


基于xml文件的验证框架

这种方式不需要重写validate()方法, 只需要一个xml文件就能搞定 , 通过下面这个注册表单来体会下

  1. <body>
  2. 注册
  3. <s:form action="user_reg">
  4. <s:textfield name="user.name" label="用户名"></s:textfield>
  5. <s:password name="user.pwd" label="密码"></s:password>
  6. <s:password name="qdpwd" label="确定密码"></s:password>
  7. <s:textfield name="user.phone" label="手机号"></s:textfield>
  8. <s:textfield name="user.email" label="邮箱"></s:textfield>
  9. <s:submit value="登录"></s:submit>
  10. </s:form>
  11. </body>

创建user类

  1. public class User {
  2. String name;
  3. String pwd;
  4. String phone;
  5. String email;
  6. public String getName() {
  7. return name;
  8. }
  9. public void setName(String name) {
  10. this.name = name;
  11. }
  12. public String getPwd() {
  13. return pwd;
  14. }
  15. public void setPwd(String pwd) {
  16. this.pwd = pwd;
  17. }
  18. public String getPhone() {
  19. return phone;
  20. }
  21. public void setPhone(String phone) {
  22. this.phone = phone;
  23. }
  24. public String getEmail() {
  25. return email;
  26. }
  27. public void setEmail(String email) {
  28. this.email = email;
  29. }
  30. }

action类, 确定密码并没有放在user类中

  1. public class From1Action extends ActionSupport {
  2. User user;
  3. String qdpwd;
  4. @Override
  5. public String execute() throws Exception {
  6. return super.execute();
  7. }
  8. public User getUser() {
  9. return user;
  10. }
  11. public void setUser(User user) {
  12. this.user = user;
  13. }
  14. public String getQdpwd() {
  15. return qdpwd;
  16. }
  17. public void setQdpwd(String qdpwd) {
  18. this.qdpwd = qdpwd;
  19. }
  20. }

接着开始配置xml , 在Action类的同包目录下创建ClassName-validation.xml,我这里就是From1Action-validation.xml, 编写以下代码:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
  3. <validators>
  4. <!-- 验证用户名 -->
  5. <field name="user.name">
  6. <field-validator type="requiredstring">
  7. <param name="trim">true</param>
  8. <message>用户名不能为空</message>
  9. </field-validator>
  10. <field-validator type="stringlength">
  11. <param name="maxLength">10</param>
  12. <param name="minLength">6</param>
  13. <message>用户名长度必须在${minLength}-${maxLength}之间</message>
  14. </field-validator>
  15. </field>
  16. <!-- 验证密码 -->
  17. <field name="user.pwd">
  18. <field-validator type="requiredstring">
  19. <message>密码不能为空</message>
  20. </field-validator>
  21. <field-validator type="stringlength">
  22. <param name="minLength">6</param>
  23. <message>密码长度必须大于等于${minLength}</message>
  24. </field-validator>
  25. </field>
  26. <!-- 验证重复密码 -->
  27. <field name="qdpwd">
  28. <field-validator type="requiredstring">
  29. <message>确定密码不能为空</message>
  30. </field-validator>
  31. <field-validator type="fieldexpression">
  32. <param name="expression">user.pwd==qdpwd</param>
  33. <message>密码和确定密码必须相同</message>
  34. </field-validator>
  35. </field>
  36. <!-- 验证手机号 -->
  37. <field name="user.phone">
  38. <field-validator type="requiredstring">
  39. <message>手机号 不能为空</message>
  40. </field-validator>
  41. <field-validator type="regex">
  42. <param name="expression">^1[3578]\d{9}$</param>
  43. <message>电话号码格式不正确</message>
  44. </field-validator>
  45. </field>
  46. <!-- 验证邮箱 -->
  47. <field name="user.email">
  48. <field-validator type="requiredstring">
  49. <message>邮箱不能为空</message>
  50. </field-validator>
  51. <field-validator type="email">
  52. <message>邮箱格式不正确</message>
  53. </field-validator>
  54. </field>
  55. </validators>

验证
这里写图片描述

发表评论

表情:
评论列表 (有 0 条评论,351人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Struts2框架验证

    struts2有框架验证,我这边主要说的是XML配置的struts2的框架验证,继承validate方法的验证还是比较容易的,至于有人用注解来验证不怎么常见我也不讲了(感觉好多