前文: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()方法实现校验(续:多业务方法时的不同验证处理)的更多相关文章

  1. struts2:数据校验,通过Action中的validate()方法实现校验,图解

    根据输入校验的处理场所的不同,可以将输入校验分为客户端校验和服务器端校验两种.服务器端验证目前有两种方式: 第一种 Struts2中提供了一个com.opensymphony.xwork2.Valid ...

  2. 第5章—构建Spring Web应用程序—关于spring中的validate注解后台校验的解析

    关于spring中的validate注解后台校验的解析 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参数不能为null,email那么必须符合email的格式,如果手动进行if判 ...

  3. Struts2(四):在Action中如何访问Web资源

    1.什么WEB资源? HttpServletRequest,HttpServletRespone,HttpApplication,ServletContext,HttpSession等原生Servle ...

  4. struts2学习笔记之八:Action中方法的动态调用

    方法一:action名称+!+方法名称+后缀 Action类中增加addUser()和delUser()方法, package com.djoker.struts2; import org.apach ...

  5. 一个Action中,可以写多个类似的业务控制方法

    1)通过模块根路径 + 功能子路径 = 访问模块下子功能的路径 @Controller @RequestMapping(value="/user") public class Us ...

  6. struts2数据校验与国际化

    数据校验: Action里的validate()方法能校验action类所有的方法,如果有错,如:addFieldError,会自动返回到workflow校验拦截器不向下继续进行,不用return i ...

  7. Struts2(二)---将页面表单中的数据提交给Action

    问题:在struts2框架下,如何将表单数据传递给业务控制器Action. struts2中,表单想Action传递参数的方式有两种,并且这两种传参方式都是struts2默认实现的,他们分别是基本属性 ...

  8. (21) java web的struts2框架的使用-Action实现的三种方式

    上一篇介绍了struts使用的四个步骤. 其中在开发action的时候,可以有三种实现方式: 1,写一个类,继承与ActionSupport 2,写一个类,实现Action接口 3,写一个类,实现业务 ...

  9. struts2:多业务方法的处理(动态调用,DMI)

    struts2支持调用指定Action类中某一个业务方法.如果没有指定,则调用execute方法. 1. 第一种实现方式,通过URL叹号参数 1.1 创建Action类,带多个方法 package c ...

随机推荐

  1. QT中QProcess调用命令行的痛苦经历

    在QT程序中需要将某些目录和文件压缩为一个rar的压缩包,于是想到了在QT中通过QProcess类调用命令行的rar.exe来达到效果,但是没想到QProcess类用起来很麻烦,而且达不到效果,折腾了 ...

  2. Dynamic CRM 2013学习笔记(二十三)CRM JS智能提示(CRM 相关的方法、属性以及页面字段),及发布前调试

    我们知道在CRM的js文件里引用XrmPageTemplate.js后,就可以实现智能提示,但每个js文件都引用太麻烦了,其实可以利用vs的功能让每个js文件自动实现智能提示CRM的js: 另外,我们 ...

  3. 安卓系统上安装.net运行时 mono runtime

    感谢以下博主: ubuntu指南 http://dawndiy.com/archives/229/ img大小调整 http://zebinj.blog.163.com/blog/static/206 ...

  4. django rest_framework--入门教程2

    接上文 这里先写一个GET请求的 1.先在VIEW里定义一个方法 代码如下: @api_view(['GET', 'POST']) def book_request(request): if requ ...

  5. 跟我一起学WCF(9)——WCF回调操作的实现

    一.引言 在上一篇文章中介绍了WCF对Session的支持,在这篇文章中将详细介绍WCF支持的操作.在WCF中,除了支持经典的请求/应答模式外,还提供了对单向操作.双向回调操作模式的支持,此外还有流操 ...

  6. solr与.net系列课程(九)solr5.1的配置

    solr与.net系列课程(九)solr5.1的配置 最近一些园友来咨询solr5.1的配置方式,然后我就去官网下载了个最新版本的solr,发现solr5.0以后solr的下载包里的内容发生的变化,移 ...

  7. java Unicode转UTF-8代码

    在做http请求时,有时候服务器传回的数据中会遇到传回数据为Unicode的情况,为此需要进行Unicode转UTF-8的转化,代码: public class StringTest { /** * ...

  8. sql 取首次投资的人

    --- 11月 ---首次投资笔数和投资金额 ) AS stNum,sum(amount) AS stAmount FROM ( ),createtime,) AS riqi,a.amount,a.u ...

  9. paip.提升效率--批量变量赋值 “多元”赋值

    paip.提升效率--批量变量赋值 "多元"赋值 ##石麻是批量变量赋值. 为一组变量赋值. 例子 1 <?php $my_array = array("Dog&q ...

  10. 分享几段JavaScript

    正则表达式 /*http://www.cnblogs.com/woxpp/*/ intege: "^-?[1-9]\\d*$", /*整数*/ intege1: "^[1 ...