开发者学堂课程【Java Web开发系列课程 - Struts2框架入门:手动验证】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/537/detail/7313
手动验证
内容介绍:
一、服务端验证
二、案例
三、总结
一、服务端验证
首先对03struts2_login 进行拷贝,即在 project name 中输入12struts2_validate。
进行拷贝后,找到其中的 Web,在 Web Context-root 中输入/validate 进行下一步操作,再进行一系列的删除与保留 index.jsp 与 login.jsp 后完成基础流程。
接下来进行注册功能,在 Name 中输入 RegisterAction 完成。
而在注册功能中需要用户的姓名、密码、年龄等,即隔行输入代码private String name;、private String pwd;、private int age;与private Date birthday,再接着进行选择并返回 get 方法 ,
如下:
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getPwd(){
return pwd;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public Date getBirthday(){
return birthday;
}
public void setBirthday(Date birthday){
this.birthday = birthday;
}
而原来对 RegisterAction 只是进行简单的编写,而现在则要对 RegisterAction 进行继承,在 public class RegisterAction {后跟上 extends ActionSupport,
即 public class RegisterAction extends ActionSupport {,先将 execute()方法写入,
如下:
@Override
public String execute() throws Exception {
return Action.SUCCESS;
}
在 ActionSupport 中有一种方法即 validate()方法,如下:
@Override
public void validate(){
}
继承后 validate()方法会协助进行验证,而真正的执行过程是先执行 validate()方法再执行 execute()方法。
则验证流程为如果 action 类继承 ActionSupport 类,那么该 action 类则将会进行继承 ActionSupport 类的相关功能,如:验证功能。
执行流程是先执行 validate()方法再执行 execute()方法,但不会真正地执行validate 方法,首先执行 validateXXX 方法,而 validateXXX 方法可能有也可能没有,所以用中括号来表示。
如果其中有一个没有执行成功则会直接返回 input,而 execute 方法无论执行成功或失败都会进行 Result 程序。
如下:
接下来进行验证,validate 方法默认不写时则表示为通过。
首先在 pubilc void validate(){下跟上 System.out.println(“validate”);与在public String execute() throws Exception {下跟上System.out.println(“execute”);进行操作,再进行配置,跟上
<package name=”default”extends=”struts-default” namesapece=”/”>,再跟上
<actionname=”register”class=”cn.sxt.action.RegisterAction”>,
再跟上<result>/index.jsp后对 RegisterAction 进行请求,得出结果后证明流程是正确的,而流程还要进行相应,即加入 reqpsonce,
如下:
二、案例
案例:
首先在 New name 中写入 register.jsp 中响应注册页面,请求 register.action,其中有用户名、密码、年龄、生日,
如下:
用户名:<input type=”text”name=”name”/><br>
密码:<input type=”password”name=”pwd”/><br>
年龄:<input type=”text”name=”age”/><br>
生日:<input type=”text”name=”birthday”/><br>
再进行访问数据,将 register.action 改为 register.jsp,得到结果如下:
输入年龄与生日后得到结果报错,如下:
报错原因为类型转换中 setBirthday 失败以及没有找到 input 的 result,当验证不成功时会跳转到 input 的结果,即输入<result name=”input”>/register.jsp进行配置,再进行输入年龄与生日,结果报错,报错原因为改变代码后没有重启服务器。再进行提交后结果正确。
而年龄不能为负数要进行验证,在 validate 方法中加入 if(age>100| |age<1){,再跟上this.addActionError(“年龄不合法“);后再进行提交并没有提交回去,只有 validate 没有 execute,年龄不合法并没有显示出来,
原因为没有加入<%@taglib uri=”/struts-tags”prefix=”s”%>以及<s:actionerror/>,加入后再进行刷新,年龄不合法则会显示。
RegisterAction 要处理很多业务,将所有业务都写入 validate 中则会非常繁琐,如验证年龄,写入 public void validateAge(){后则可将if(age>100| |age<1){,再跟上this.addActionError(“年龄不合法“);
加入,执行 validateXXX 方法后再执行 validate 方法,再执行 execute 方法。进行验证后发现没有显示 validateXXX 方法。如果要验证 validateXXX 方法,需要有public String age(){执行请求才会执行 validateAge,才会进行一系列操作,
如下:
public String age(){
System.out.println(“age”);
return Action.SUCCESS;
}
然后将配置文件中的
<actionname=”register”class=”cn.sxt.action.RegisterAction”>改为
<actionname=”register”class=”cn.sxt.action.RegisterAction”method=“age”>
再进行验证后则会显示 validate age 与 validate,进行改正后如下:
注意:
如果执行的是 Action 中的 execute 方法,那么只会执行 validate 方法。
如果执行的是自定义的 action.register 方法,那么将会先执行 validateRegister--validate--register 方法。
三、总结
(1) jsp 页面:
一定要加上<s:actionerror/>或者是<s:fielderror/>,
如下:
<s:actionerror/>
<form action=”register.action”method=”post”>
用户名:<input type=”text”name=”name”/><br>
密码:<input type=”password”name=”pwd”/><br>
年龄:<input type=”text”name=”age”/><br>
生日:<input type=”text”name=”birthday”/><br>
name=”birthday”/>
<br>
<input type=”submit”value=“登录”/>
</form>
(2)Action代码:
public class RegisterAction extends ActionSupport{
private String name;
private String pwd;
private int age
private Date birthday;
@Override
public String execute() throws Exception {
System.out.println(“execute”);
return Action.SUCCESS;
}
public String register() {
System.out.println(“register”);
return Action.SUCCESS;
}
public void validateRegister(){
System.out.println(“validate age”);
if(age>100| |age<1){
this.addActionError(“年龄不合法“);
}
}
public void validate(){
System System.out.println(“validate”);
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getPwd(){
return pwd;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public Date getBirthday(){
return birthday;
}
public void setBirthday(Date birthday){
this.birthday = birthday;
}
}
(3)Struts.xml 配置文件:
<package name=”default”extends=”struts-default” namesapece=”/”>
<actionname=”register”class=”cn.sxt.action.RegisterAction”>
<result>/index.jsp</result>
<result name=”input”>/resgister.jsp</result>
</action>
</struts>




