开发者学堂课程【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
S
tring
get
N
ame(){
return
name;
}
public
void
set
N
ame(String
name){
this
.
name
=
name;
}
public
S
tring
get
P
wd(){
return
pwd;
}
public
int
getAge(){
return
age;
}
public
void
set
A
ge(int
age){
this
.age = age;
}
p
ublic Date getBirthday
(){
return
birthday
;
}
public
void
set
B
irthday(Date
birthday){
this.birthday
=
birthday;
}
而原来对 RegisterAction 只是进行简单的编写,而现在则要对 RegisterAction 进行继承,在 public class RegisterAction {后跟上 extends ActionSupport,
即 public class RegisterAction extends ActionSupport {,先将 execute()方法写入,
如下:
@
O
verride
public
S
tring
execute()
throws
E
xception
{
return
A
ction
.SUCCESS
;
}
在 ActionSupport 中有一种方法即 validate()方法,如下:
@
O
verride
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
S
tring
execute()
throws
E
xception
{
下跟上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
validate
A
ge(){
后则可将if(age>
100
|
|age<1){
,再跟上this
.addActionError(“
年龄不合法“);
加入,执行 validateXXX 方法后再执行 validate 方法,再执行 execute 方法。进行验证后发现没有显示 validateXXX 方法。如果要验证 validateXXX 方法,需要有public
S
tring
age(){
执行请求才会执行 validateAge,才会进行一系列操作,
如下:
public
S
tring
age(){
S
ystem.
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:
field
error/>
,
如下:
<
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>
n
ame=”birthday”/>
<br>
<input type=”submit”value=
“登录”/
>
</form>
(2)Action代码:
public
class
R
egister
A
ction
extends
A
ction
S
upport
{
private
S
tring
name;
private
S
tring
pwd;
private
int
age
private
Date
birthday
;
@
O
verride
public
S
tring
execute()
throws
E
xception
{
S
ystem
.out.println(“execute”);
return
A
ction
.SUCCESS
;
}
p
ublic String register() {
System.out.println(“register”);
return
A
ction
.SUCCESS
;
}
p
ublic void validateRegister(){
System.out.println(“validate age”);
if(age>
100
|
|age<1){
this
.addActionError(“
年龄不合法“)
;
}
}
public
void
validate(){
S
ystem
System.out.println(“va
lidate
”);
}
public
S
tring
get
N
ame(){
return
name;
}
public
void
set
N
ame(String
name){
this
.
name
=
name;
}
public
S
tring
get
P
wd(){
return
pwd;
}
public
int
getAge(){
return
age;
}
public
void
set
A
ge(int
age){
this
.age = age;
}
p
ublic Date getBirthday
(){
return
birthday
;
}
public
void
set
B
irthday(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>