struts2:数据校验,通过Action中的validate()方法实现校验(续:多业务方法时的不同验证处理)
前文: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 ...
随机推荐
- 做php网站后台开发,在Linux系统上进行更好吗?
1. PHP是开源软件,它在bsd/linux/win下都有很好的正式版及孪生版.并非开发php就必须要在linux下进行.主机服务商们习惯性的把asp与php分为两个主机系列几进行销售.由于asp只 ...
- (原创)基于MCU的频率可调,占空比可调的PWM实现(MCU,MCS-51/MSP430)
1.Abstract 做这个是受朋友之邀,用在控制电机转动的方面.他刚好在一家好的单位实习,手头工作比较多,无暇分身,所以找我帮忙做个模型.要求很明晰,PWM的频率在0~1KHz范围内,占空比 ...
- 修改VNC分辨率大小
实验系统是centos6.5,在被连接的机器上需要安装vncserver. 1.第一种方法:使用geometry参数进行调整使用man命令获得关于geometry参数的描述[root@secdb ~] ...
- opengl的mipmap
压缩纹理是不能调用glGenerateMipmap生成mipmap的. DDS和PVR都不行. 强行调用会产生GL_INVALID_OPERATION的错误. PNG格式试验了glGenerateMi ...
- 基于python的堡垒机
一 堡垒机的架构 堡垒机的核心架构通常如下图所示: 二.堡垒机的一般执行流程 管理员为用户在服务器上创建账号(将公钥放置服务器,或者使用用户名密码) 用户登陆堡垒机,输入堡垒机用户名密码,显示当前用户 ...
- ArcServer 10.0 “No Content”、“Server Host Cannot be null” 错误
问题一:"No Content" 问题描述: 在输入服务地址时:http://192.168.1.180/arcgis/services 结果出现下面的错误: 解决办法: ...
- TypeScript开篇:尝点新鲜和甜头
返回TS学习总目录 快速开始 我们通过创建一个简单的web应用来开始使用TypeScript.获得TS工具的方法主要有两种,一种是通过NPM(Node包管理器),另一种是通过VS2012安装TS的插件 ...
- 你应该知道的RPC原理
你应该知道的RPC原理 在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司尤其是大型互 ...
- MySQL:InnoDB存储引擎的B+树索引算法
很早之前,就从学校的图书馆借了MySQL技术内幕,InnoDB存储引擎这本书,但一直草草阅读,做的笔记也有些凌乱,趁着现在大四了,课程稍微少了一点,整理一下笔记,按照专题写一些,加深一下印象,不枉读了 ...
- 使用轻量级ORM Dapper进行增删改查
项目背景 前一段时间,开始做一个项目,在考虑数据访问层是考虑技术选型,考虑过原始的ADO.NET.微软的EF.NH等.再跟经理讨论后,经理强调不要用Ef,NH做ORM,后期的sql优化不好做,公司 ...