struts2 表单验证问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2 表单验证问题相关的知识,希望对你有一定的参考价值。

假设有个UserAction,我想让execute执行时验证username和password非空,而不验证剩下的,changePassword执行时不验证前两个,这个怎么实现,最好用注解
public class UserAction extends ActionSupport


String username;
String password;
@Action("login")
@Override
public String execute() throws Exception
String oldpassword;
public String changePassword() throws Exception



校验一:javascript校验
校验二:手动校验:
1,在方法里获取植,判断值是不是为空
2,validate方法进行验证
3,validateXXX方法验证,即validateExecute()里面判断验证
校验三:框架验证
1,validate.xml文件验证
2,注解验证
在你的username的setUsername()上面写上
@RequiredStringValidator(
type=ValidatorType.FIELD,
key="error.username.required",
message="$getText('username')is required",
shortCircuit=ture
);
@StringLengthFieldValidator(
//自己再查查吧
)
我觉得你只能手动校验,或者选择validateExecute()种方法校验
因为注解会全部校验这个action里你注解的有set的变量的
参考技术A 另外编写一个字符串的判空的类,比如StringUtil,可以这样写:
public class StringUtil
public static boolean isFilled(String str)
if(str == null || str.length() < 1)
return false;
else
return true;






然后再excute方法里面想要验证username和password,可以这样写:if(StringUtil.isFilled(username) && StringUtil.isFilled(password))
//不为空时的情况



下面changePassword方法不想验证就不写就行了。

是你想要的答案吗?
参考技术B 在validate 方法中吧、、、在调用excute 方法之前执行

第七节 struts2.3.15之表单提交与表单验证

1.在WebContent中建立register.jsp文件,内容如下

  

[html] view plain copy

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  

  2.     pageEncoding="UTF-8"%>  

  3.    <%@ taglib uri="/struts-tags" prefix="s" %>  

  4.    

  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  

  6. <html>   

  7. <head>  

  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

  9. <title>Insert title here</title>  

  10. <style type="text/css">  

  11.   

  12. .con{  

  13.     position:absolute;  

  14.     left:50%;  

  15.     top:50%;  

  16.     width:300px;  

  17.     height:300px;  

  18.     margin-top:-150px;  

  19.     margin-left:-150px;  

  20.     text-align:center;  

  21.     border: 1px solid red;  

  22. }  

  23. </style>  

  24. </head>  

  25. <body>  

  26. <div class="con">  

  27.     <s:form action="register" namespace="/form_test" method="post">   

  28.         <s:textfield label="姓名" name="person.name" ></s:textfield>  

  29.         <s:textfield label="密码" name="person.password"></s:textfield>  

  30.         <s:textfield label="确认密码" name="person.confirmPassword"></s:textfield>  

  31.         <s:textfield label="年龄" name="person.age" tooltip="年龄必须大于18岁"></s:textfield>  

  32.         <s:checkboxlist name="person.hobby" list="{'篮球','编程','小说'}"></s:checkboxlist>  

  33.         <s:submit label="提交"></s:submit>  

  34.    </s:form>   

  35. </div>  

  36. </body>  

  37. </html>  


 

 

3.在struts.xml文件中加入表单提交需要的action与result

[html] view plain copy

  1. <?xml version="1.0" encoding="UTF-8" ?>  

  2. <!DOCTYPE struts PUBLIC  

  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  

  4.     "http://struts.apache.org/dtds/struts-2.3.dtd">  

  5.   

  6. <struts>  

  7.   <package name="form_test" namespace="/form_test" extends="struts-default">  

  8.     <action name="register" class="com.undergrowth.Register">  

  9.         <result>/success.jsp</result>  

  10.     </action>  

  11.   </package>  

  12.     

  13.   <!-- <package name="first" namespace="/first" extends="struts-default">  

  14.     <action name="first" class="com.undergrowth.First" method="execute">  

  15.      <result name="success">/first.jsp</result>  

  16.     </action>  

  17.   </package> -->  

  18. </struts>  

      在WebContent下建立success.jsp文件

         

[html] view plain copy

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  

  2.     pageEncoding="UTF-8"%>  

  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  

  4. <html>  

  5. <head>  

  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

  7. <title>Insert title here</title>  

  8. </head>  

  9. <body>  

  10.     ${person}   

  11. </body>  

  12. </html>  


 

 


4.在src目录下建立Register的类文件,包名为com.undergrowth

Register.java

[java] view plain copy

  1. package com.undergrowth;  

  2.   

  3. public class Register {  

  4.     private String msg;  

  5.     private Person person;  

  6.       

  7.       

  8.     public Person getPerson() {  

  9.         return person;  

  10.     }  

  11.   

  12.   

  13.     public void setPerson(Person person) {  

  14.         this.person = person;  

  15.     }  

  16.   

  17.   

  18.     public String getMsg() {  

  19.         return msg;  

  20.     }  

  21.   

  22.   

  23.     public String execute()  

  24.     {  

  25.         msg="注册成功";  

  26.           

  27.         return "success";  

  28.     }  

  29. }  

建立Person.java 对信息进行封装

[java] view plain copy

  1. package com.undergrowth;  

  2.   

  3. import java.util.Arrays;  

  4.   

  5. public class Person {  

  6.     private String name;  

  7.     private String password;  

  8.     private String confirmPassword;  

  9.     private int age;  

  10.     private String phone;  

  11.     private String email;  

  12.     private String[] hobby;  

  13.       

  14.     public String[] getHobby() {  

  15.         return hobby;  

  16.     }  

  17.     public void setHobby(String[] hobby) {  

  18.         this.hobby = hobby;  

  19.     }  

  20.     public String getName() {  

  21.         return name;  

  22.     }  

  23.     public void setName(String name) {  

  24.         this.name = name;  

  25.     }  

  26.     public String getPassword() {  

  27.         return password;  

  28.     }  

  29.     public void setPassword(String password) {  

  30.         this.password = password;  

  31.     }  

  32.     public String getConfirmPassword() {  

  33.         return confirmPassword;  

  34.     }  

  35.     public void setConfirmPassword(String confirmPassword) {  

  36.         this.confirmPassword = confirmPassword;  

  37.     }  

  38.     public int getAge() {  

  39.         return age;  

  40.     }  

  41.     public void setAge(int age) {  

  42.         this.age = age;  

  43.     }  

  44.     public String getPhone() {  

  45.         return phone;  

  46.     }  

  47.     public void setPhone(String phone) {  

  48.         this.phone = phone;  

  49.     }  

  50.         return email;  

  51.     }  

  52.         this.email = email;  

  53.     }  

  54.       

  55.     @Override  

  56.     public String toString() {  

  57.         return "Person [name=" + name + ", password=" + password  

  58.                 + ", confirmPassword=" + confirmPassword + ", age=" + age  

  59.                 + ", phone=" + phone + ", email=" + email + ", hobby="  

  60.                 + Arrays.toString(hobby) + "]";  

  61.     }  

  62.       

  63.       

  64. }  



 

5.进行测试,发布项目到tomcat,在浏览器中输入http://localhost:8080/struts2_form/register.jsp

 并输入相应的信息,如下

第七节 struts2.3.15之表单提交与表单验证

 

6.表单成功提交,进入到success.jsp界面,显示提交的表单信息

第七节 struts2.3.15之表单提交与表单验证

 

现在开始对上面表单提交的信息进行校验,采用xml配置的方式对表单提交的信息进行校验

1.Register类继承ActionSupport(因为需要对Register类的execute方法进行校验,需要使用ActionSupport来支持转发result)

2.编写验证的xml文件,该文件需要和action类放在同一个包下,文件的取名应遵守ActionClassName-validation.xml规则,其中ActionClassName为action的简单类名,-validation为固定写法。如这里就是Register-validation.xml文件放在com.undergrowth包下

   验证的xml文件模板可以去你下载的struts2.3.15的完整版的目录文件中的apps中有相应的例子,即struts-2.3.15.1\apps\struts2-blank\WEB-INF\src\java\example\Login-validation.xml中拷贝过来

  

[html] view plain copy

  1. <!DOCTYPE validators PUBLIC  

  2.         "-//Apache Struts//XWork Validator 1.0.2//EN"  

  3.         "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">  

  4.   

  5. <validators>  

  6.     <field name="person.name">  

  7.         <field-validator type="requiredstring">  

  8.         <param name="trim"></param>  

  9.                 <message>用户名不能为空</message>  

  10.         </field-validator>  

  11.     </field>  

  12.     <field name="person.age">  

  13.         <field-validator type="int">  

  14.             <param name="min">18</param>  

  15.             <message>年龄必须大于18岁</message>  

  16.         </field-validator>  

  17.     </field>  

  18.     <field name="person.phone">  

  19.         <field-validator type="regex">  

  20.           <param name="regex"><![CDATA[^1[358]\d{9}$]]></param>            

[html] view plain copy

  1.         </field-validator>  

  2.     </field>  

  3.     <field name="person.email">  

  4.       <field-validator type="email">  

  5.          <message>电子邮箱的格式不正确</message>  

  6.       </field-validator>  

  7.     </field>  

  8. </validators>  


 

 

3.在register的action中加入出错后的返回视图 如下

<result name="input">/register.jsp</result>

 

 

4.进行测试,发布项目,打开 http://localhost:8080/struts2_form/register.jsp  输入相应的信息

第七节 struts2.3.15之表单提交与表单验证

提交后 会看到相应的提示信息

第七节 struts2.3.15之表单提交与表单验证

输入正确信息 如下

        第七节 struts2.3.15之表单提交与表单验证

 

正确的显示界面

第七节 struts2.3.15之表单提交与表单验证

 

以上即是表单的验证  当然还有一种 自己编写java代码进行验证 即先继承ActionSupport,然后重写其validate方法 一样可实现效果。



第七节 struts2.3.15之表单提交与表单验证



javawl

java学习之路




以上是关于struts2 表单验证问题的主要内容,如果未能解决你的问题,请参考以下文章

Struts2 JQuery:Ajax 提交表单、服务器表单验证和成功重定向

struts2官方 中文教程 系列十一:使用XML进行表单验证

struts2校验器验证表单避免无效sql查询

第七节 struts2.3.15之表单提交与表单验证

struts2_validate表单验证

struts2校验器验证表单避免无效sql查询