知识点:
通过重写validate() 方法实现, validate()方法会校验action中所有与execute方法签名相同的方法。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。
validate()使用例子:
public void validate() {
if(this.mobile==null || "".equals(this.mobile.trim())){ this.addFieldError("username", "手机号不能为空");
}else{ if(!Pattern.compile("^1[358]\\d{9}").matcher(this.mobile.trim()).matches()){
this.addFieldError(“mobile", "手机号的格式不正确"); }
}
}
验证失败后,请求转发至input视图:
<result name="input">/WEB-INF/page/addUser.jsp</result>
在addUser.jsp页面中使用<s:fielderror/>显示失败信息。
注意Validate(){}会对这个Action中的所有方法进行验证。
照样看步骤:
第一步:新建类实现继承ActionSupport
public class HandValidates extends ActionSupport {
private String username;
private String mobile;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String update(){
ActionContext.getContext().put("message", "更新成功");
return "message";
}
public String save(){
ActionContext.getContext().put("message", "保存成功");
return "message";
}
@Override
public void validate(){
if(this.username==null || "".equals(this.username.trim())){
this.addFieldError("username", "用户名不能为空");
}
if(this.mobile==null || "".equals(this.mobile.trim())){
this.addFieldError("mobile", "手机号不能为空");
}else{
if(!Pattern.compile("^1[358]\\d{9}$").matcher(this.mobile).matches()){
this.addFieldError("mobile", "手机号格式不正确");
}
}
}
}
第二步:配置stucts.xml文件
<action name="manage_*" class="com.liyong.HandValidates.HandValidates" method="{1}">
<!-- 下面的input视图是当存在验证错误或提交参数是类型转换出错 -->
<result name="input">/index.jsp</result>
<result name="message">/WEB-INF/page/message.jsp</result>
</action>
注意:上面的input视图是当验证出错或参数请求类型转换是出现异常都会自动转到input视图
第三步:编写input视图和message视图
index.jsp:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>输入校验</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<!-- 以下标签是用来输出错误信息 -->
<s:fielderror/>
<form action="${pageContext.request.contextPath}/person/manage_save.action" method="post">
用户名:<input type="text" name="username"/>不能为空<br/>
手机号:<input type="text" name="mobile"/>不能为空,并且要符合手机号的格式1,3/5/8,后面是9个数字<br/>
<input type="submit" value="提 交"/></form>
</body>
</html>
message.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>结果</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
${message}
</body>
</html>
第四步:部署
第五步:可以更改表单提交的action方法名可以知道对action中的所有方法进行验证
.....
通过重写validate() 方法实现, validate()方法会校验action中所有与execute方法签名相同的方法。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。
validate()使用例子:
public void validate() {
if(this.mobile==null || "".equals(this.mobile.trim())){ this.addFieldError("username", "手机号不能为空");
}else{ if(!Pattern.compile("^1[358]\\d{9}").matcher(this.mobile.trim()).matches()){
this.addFieldError(“mobile", "手机号的格式不正确"); }
}
}
验证失败后,请求转发至input视图:
<result name="input">/WEB-INF/page/addUser.jsp</result>
在addUser.jsp页面中使用<s:fielderror/>显示失败信息。
注意Validate(){}会对这个Action中的所有方法进行验证。
照样看步骤:
第一步:新建类实现继承ActionSupport
public class HandValidates extends ActionSupport {
private String username;
private String mobile;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String update(){
ActionContext.getContext().put("message", "更新成功");
return "message";
}
public String save(){
ActionContext.getContext().put("message", "保存成功");
return "message";
}
@Override
public void validate(){
if(this.username==null || "".equals(this.username.trim())){
this.addFieldError("username", "用户名不能为空");
}
if(this.mobile==null || "".equals(this.mobile.trim())){
this.addFieldError("mobile", "手机号不能为空");
}else{
if(!Pattern.compile("^1[358]\\d{9}$").matcher(this.mobile).matches()){
this.addFieldError("mobile", "手机号格式不正确");
}
}
}
}
第二步:配置stucts.xml文件
<action name="manage_*" class="com.liyong.HandValidates.HandValidates" method="{1}">
<!-- 下面的input视图是当存在验证错误或提交参数是类型转换出错 -->
<result name="input">/index.jsp</result>
<result name="message">/WEB-INF/page/message.jsp</result>
</action>
注意:上面的input视图是当验证出错或参数请求类型转换是出现异常都会自动转到input视图
第三步:编写input视图和message视图
index.jsp:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>输入校验</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<!-- 以下标签是用来输出错误信息 -->
<s:fielderror/>
<form action="${pageContext.request.contextPath}/person/manage_save.action" method="post">
用户名:<input type="text" name="username"/>不能为空<br/>
手机号:<input type="text" name="mobile"/>不能为空,并且要符合手机号的格式1,3/5/8,后面是9个数字<br/>
<input type="submit" value="提 交"/></form>
</body>
</html>
message.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>结果</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
${message}
</body>
</html>
第四步:部署
第五步:可以更改表单提交的action方法名可以知道对action中的所有方法进行验证
.....