前文:struts2:数据校验,通过Action中的validate()方法实现校验,图解
如果定义的Action中存在多个逻辑处理方法,且不同的处理逻辑可能需要不同的校验规则,在这种情况下,就需要通过Struts2框架提供的validateX()方法来准确校验Action中的某一个方法,其中X表示处理逻辑的方法名。
还是以前的例子,换一种写法,来说明validate()方法和validateX()方法的用法。
1. 创建前台JSP页面
表单录入页面:registerM.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page isELIgnored="false"%>
<%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<s:form action="registerM" method="post">
账号:<s:textfield name="username"></s:textfield>${errors.username[0]}
<br/>
密码:<s:textfield name="password"></s:textfield>${errors.password[0]}
<br/>
年龄:<s:textfield name="age"></s:textfield>${errors.age[0]}
<br/>
身高:<s:textfield name="height"></s:textfield>${errors.height[0]}
<br/>
<s:submit method="log" value="提交"></s:submit>
</s:form>
</body>
</html>
注意:submit元素中的method属性为log,表示调用Action中的log方法,而不是默认的execute方法。
提交成功后显示页面:success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page isELIgnored="false"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
success! :)
</body>
</html>
2. 创建Action类
package com.clzhang.struts2.demo1; import com.opensymphony.xwork2.ActionSupport; public class RegisterMAction extends ActionSupport {
public static final long serialVersionUID = 1; private String username;
private String password;
private Integer age;
private Double height; public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getHeight() {
return height;
}
public void setHeight(Double height) {
this.height = height;
} public void validateLog() {
System.out.println("validateLog方法被调用..."); if (!username.trim().equals("admin")) {
this.addFieldError("username", "用户非法,必须为admin");
} if (!password.trim().equals("pass1")) {
this.addFieldError("password", "密码非法,必须为pass1");
} if (age == null || age >= 110 || age < 0) {
this.addFieldError("age", "年龄非法,必须为0到100之间");
}
if (height == null || height < 0 || height > 3) {
this.addFieldError("height", "身高非法,必须为0到3米之间");
}
} public String log() {
System.out.println("log method said:"+ username + "|" + age + "|" + height + " register finished!"); return SUCCESS;
} @Override
public void validate() {
System.out.println("validate方法被调用...");
} public String execute() {
System.out.println(username + "|" + age + "|" + height + " register finished!"); return SUCCESS;
}
}
注意:execute()方法对应验证方法为validate()方法;而log()方法对应的验证方法则为validateLog()方法。
3. 修改struts.xml文件
<action name="registerM" class="com.clzhang.struts2.demo1.RegisterMAction">
<result name="success">/struts2/demo1/success.jsp</result>
<result name="input">/struts2/demo1/registerM.jsp</result>
</action>
很简单,提交成功显示成功信息;数据不正确则返回到registerM.jsp。
4. 测试
打开IE,输入地址:http://127.0.0.1:8080/st/struts2/demo1/registerM.jsp
结果如下:
直接提交,结果如下:
后台显示:
输入正确的数据,再次提交,前台显示到成功页面,后台显示:
注意:每次运行都是先调用validateLog方法,然后再调用validate方法(哪怕是validateLog方法已经出错了)。校验出错时,使用函数addFieldError将错误信息key-value对放入到容器中,在JSP中再取出来显示。
更多阅读:
struts2:数据校验,通过Action中的validate()方法实现校验,图解
struts2:数据校验,通过XWork校验框架实现(validation.xml)
struts2:数据校验,通过Action中的validate()方法实现校验(续:多业务方法时的不同验证处理)的更多相关文章
-
struts2:数据校验,通过Action中的validate()方法实现校验,图解
根据输入校验的处理场所的不同,可以将输入校验分为客户端校验和服务器端校验两种.服务器端验证目前有两种方式: 第一种 Struts2中提供了一个com.opensymphony.xwork2.Valid ...
-
第5章—构建Spring Web应用程序—关于spring中的validate注解后台校验的解析
关于spring中的validate注解后台校验的解析 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参数不能为null,email那么必须符合email的格式,如果手动进行if判 ...
-
Struts2(四):在Action中如何访问Web资源
1.什么WEB资源? HttpServletRequest,HttpServletRespone,HttpApplication,ServletContext,HttpSession等原生Servle ...
-
struts2学习笔记之八:Action中方法的动态调用
方法一:action名称+!+方法名称+后缀 Action类中增加addUser()和delUser()方法, package com.djoker.struts2; import org.apach ...
-
一个Action中,可以写多个类似的业务控制方法
1)通过模块根路径 + 功能子路径 = 访问模块下子功能的路径 @Controller @RequestMapping(value="/user") public class Us ...
-
struts2数据校验与国际化
数据校验: Action里的validate()方法能校验action类所有的方法,如果有错,如:addFieldError,会自动返回到workflow校验拦截器不向下继续进行,不用return i ...
-
Struts2(二)---将页面表单中的数据提交给Action
问题:在struts2框架下,如何将表单数据传递给业务控制器Action. struts2中,表单想Action传递参数的方式有两种,并且这两种传参方式都是struts2默认实现的,他们分别是基本属性 ...
-
(21) java web的struts2框架的使用-Action实现的三种方式
上一篇介绍了struts使用的四个步骤. 其中在开发action的时候,可以有三种实现方式: 1,写一个类,继承与ActionSupport 2,写一个类,实现Action接口 3,写一个类,实现业务 ...
-
struts2:多业务方法的处理(动态调用,DMI)
struts2支持调用指定Action类中某一个业务方法.如果没有指定,则调用execute方法. 1. 第一种实现方式,通过URL叹号参数 1.1 创建Action类,带多个方法 package c ...
随机推荐
-
面向对象js瀑布流效果
index.html <!doctype html><html lang="en"> <head> <!--网站编码格式,UTF-8 国 ...
-
[C#]Stream.Write Extension Method
在处理Stream型态时常会使用到Stream.Write这个方法,每次都会有种疑问就是,大多数的处理都是要将Buffer整个写入,為何偏偏每次都要将索引带0,长度带為Buffer的大小呢?另外在处理 ...
-
zabbix的Java API(一)
上文说了,我是对zabbix做第二次开发的小白,既然要对zabbix做第二次开发又是小白,那么就得来研究zabbix提供的相关API了. 于是我在zabbix网站各种找,终于在下面网址找到了: htt ...
-
html5图片上传时IOS和Android均显示摄像头拍照和图片选择
最近在做信开发时,发现<input type="file" />在IOS中可以拍照或从照片图库选择,而Android系统则显示资源管理器,无拍照选项,网上查找资料,改为 ...
-
Lintcode399 Nuts &; Bolts Problem solution 题解
[题目描述] Given a set of n nuts of different sizes and n bolts of different sizes. There is a one-one m ...
-
leetcode — scramble-string
import java.util.Arrays; /** * Source : https://oj.leetcode.com/problems/scramble-string/ * * Given ...
-
升级SilverLight为5.1.50907.0后,VS调试时报“无法启动调试--未安装 Silverlight Developer 运行时。请安装一个匹配版本”的处理办法
作者: zyl910 一.问题 今天需要调试一个SilverLight程序.运行时ie弹出了一个升级提示,于是手贱点了升级. 随后便悲剧了,VS调试时报"无法启动调试--未安装 Silver ...
-
上传文件异常 MultipartException
参考自 https://blog.csdn.net/u010429286/article/details/54381705 现象 上传文件报错 org.springframework.web.mul ...
-
Scala学习笔记(一):入门
变量定义 Scala有两种变量,val和var.val类似于Java中的final变量,一旦初始化了,val就不能再被赋值.var可以多次赋值.但由于函数式编程特性,Scala更推崇val. var的 ...
-
C# 写App.config配置文件的方法
private static void AccessAppSettings() { //获取Configuration对象 Configuration config = ConfigurationMa ...