`
1happy10
  • 浏览: 19802 次
  • 性别: Icon_minigender_1
  • 来自: 感德
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

struts2输入验证--validate()方法验证

阅读更多
action类

package edu.hust.action;

import java.util.Calendar;
import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport {
    
    private static final long serialVersionUID = 1L;
    
    private String username;
    private String password;
    private String repassword;
    private int age;
    private Date birthday;
    private Date graduation;
    
    //为了节省篇幅, 便于阅读, 这里将setter方法和getter方法全部省略了

    public void validate() {
        /*
         * 1.遇到类型转换错误的时候(也就是说不能进行类型转换), struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面, 最后这个信息会显示在相应的错误页中。
         *   在这里我们不推荐使用struts2的自动验证,其一其功能有限,其二其错误输出信息只是给程序员看的,而会让使用者一头雾水。
         *   解决方法:找到自动提示的错误信息,将错误信息内容覆盖为我们希望看到的--通过资源文件。
         * 
         * 2.空表单提交struts如何处理(不论是从register.jsp提交还是从register.action提交, 以下结论都符合)
         *  (1)String类型, setter方法接收的值为空字符串:是"", 而不是null。
         *  (2)int类型, setter方法接收的值为0。
         *  (3)Date类型, setter方法接收的值为null。
         * 
         * 2.错误表单提交且类型无法转换
         *   (1)int类型(如表单中输入abc, 则无法转换为int类型), setter方法接收的值为0。
         *   (2)Date类型(如表单中输入abc, 则无法转换为Date类型), setter方法接收的值为null。
         *   这种错误struts2会自动生成错误信息:这就带来一个bug, 如果是空表单提交, struts2不会自动生成错误信息, 我们必须人为添加错误信息, 人为添加后, 再出现错误表单提交, 这是错误输出页(即表单页)会将我们自定义的错误输出和系统自动添加的错误输出全打印出来, 造成了重复。
         *   解决方案:(1)使用addActionError(); (2)s:textfield等表单标签有一个theme(主题)属性, 默认主题是使用表格; 还有Ajax等主题, 这里换为simple主题, 表示不再用表格封装这个标签(相当于把s:textfield变为了input type="text")。这样就可以消除了自动提示。(补充:s:form也有theme这个属性)
         * 
         * */
        if (username.trim().length() < 5 || username.trim().length() > 11) {
            this.addFieldError("username", "用户名长度必须在6~10之间");
        }
        
        if (!(password.length() > 5 && password.length() < 11) || !(repassword.length() > 5 && repassword.length() < 11)) {
            this.addFieldError("password", "密码长度必须在6~10之间");
        } else if (!password.equals(repassword)) {
            this.addFieldError("password", "请确认两次输入的密码一致");
        }
        
        if (age < 0 || age > 150) {
            this.addFieldError("age", "请输入正确年龄");
        }
        
        if (birthday != null && graduation != null) {
            Calendar cBirthday = Calendar.getInstance();
            cBirthday.setTime(birthday);
            Calendar cGraduation = Calendar.getInstance();
            cGraduation.setTime(graduation);
            if (cBirthday.after(cGraduation)) {
                this.addFieldError("birthday", "出生日期怎么可能大于毕业日期!!好好注册!!");
            }
        } else {
            this.addFieldError("birthday", "出生日期和毕业日期不能为空");
        }
        
    }
    
    public String execute() throws Exception {
        return SUCCESS;
    }
    
}
2.register.jsp

<%@ page contentType="text/html;charset=GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!-- struts2的s标签可以自动将程序中通过addFieldError()方法添加的错误显示出来 -->
<!-- 如果不使用struts2的s标签,可以通过s:fielderror/s:actionerror标签将错误打印出来,它的作用和struts1中的html:errors作用一致 -->
<!-- 在表单提交失败时,希望原来填过的值可以保留,struts2的s标签自动有保留功能,html标签需要通过request的el表达式实现保留 -->

<!-- 和html不同, struts2的s:form标签默认提交方式为post(method参数默认为post) -->

<s:form action="register">
    
    <s:textfield name="username" label="请输入用户名" />
    <s:password name="password" label="请输入密码" />
    <s:password name="repassword" label="请重新输入密码" />
    <s:textfield name="age" label="请输入密码" />
    <s:textfield name="birthday" label="请输入出生日期" />
    <s:textfield name="graduation" label="请输入毕业日期" />
    <s:submit value="提交" />
    <s:reset value="重新添加" />
    
</s:form>
3.如何修改struts2在类型输入错误时自动生成的错误信息:通过"全局/局部的验证错误信息输出转换资源文件"可以实现。

# 全局的验证错误信息输出转换

# 例如对于age表单:没改写之前系统自动错误信息为Invalid field value for field "age". 经过下面这句改写后, 系统自动错误信息为age error

# 局部.properties和全局.properties同时作用于验证错误信息输出转换时,局部有效、全局无效。

xwork.default.invalid.fieldvalue = {0} error
# 局部的验证错误信息输出转换

# 注意命名方式。应该与在要验证的Action放在同一个包下,而且名字RegisterAction.java与RegisterAction.properties要对应起来。

# 局部的验证错误信息输出转换。例如对于age表单:没改写之前系统自动错误信息为Invalid field value for field "age". 经过下面这句改写后, 系统自动错误信息为age error

# 局部.properties和全局.properties同时作用于验证错误信息输出转换时,局部有效、全局无效。

invalid.fieldvalue.age = age conversion error.
4.最后是struts.xml,在valudate()验证时,这里就没有特别之处了

<!DOCTYPE struts PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
          "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="struts2" extends="struts-default">
        <action name="register" class="edu.hust.action.RegisterAction">
            <result name="input">/register.jsp</result>
            <result>/result.jsp</result>
        </action>
    </package>
</struts>

分享到:
评论

相关推荐

    struts2 validate 验证

    在Struts2中,`validate`是用于处理用户输入验证的重要机制,它可以帮助开发者确保从客户端提交的数据满足预设的业务规则,从而提高应用程序的安全性和用户体验。 1. **Struts2 验证基础** Struts2的验证分为两种...

    Struts 结合 Validate框架验证详解

    当用户提交表单时,Struts会调用ActionForm对象的validate()方法进行验证。这个方法通常是根据业务逻辑来定义的,如果验证失败,Struts会将错误消息添加到ActionErrors容器中,并跳转回表单页面显示这些错误信息。 ...

    Struts2的validate验证框架

    这个validate验证框架中的actiionerror级别的错误的验证提示,并包含了如何在一个Action中处理多个业务逻辑,(struts1.x 中的DispatcheAction),例子比较简单,希望对大家学习struts有所帮助。

    struts2 自定义验证程序的实现方法详解

    ### Struts2 自定义验证程序的实现方法详解 #### 一、Struts2 内建验证程序实现的分析 在探讨如何实现自定义验证程序之前,我们先来了解一下 Struts2 的内置验证机制。Struts2 提供了丰富的内置验证器(Validator...

    Struts2数据输入验证教程详解

    总结,Struts2的数据输入验证机制提供了服务端验证和客户端验证两种策略,通过重写Java方法或配置XML文件来定义验证规则。理解并熟练运用这些机制,开发者可以创建出安全、稳定且用户体验良好的Web应用。在实际开发...

    Struts2表单验证

    Struts2是一个流行的Java web开发框架,其在处理用户表单数据时提供了强大的验证功能,确保输入的数据符合预期的格式和规则。本文将深入探讨Struts2的表单验证机制。 首先,Struts2的输入验证分为两种方式:手动...

    struts2输入验证例子

    在Struts2中,我们可以在Action类中覆盖`validate()`方法来实现自定义的验证逻辑。这个方法会在业务逻辑执行之前被调用,检查用户提交的数据是否有效。如果验证失败,`Action`对象的`fieldErrors`属性会被填充错误...

    Struts2用validate方法进行表单验证

    在Struts2中,我们可以利用validate方法进行高效且灵活的前端数据验证,确保用户输入的数据满足业务规则,从而提升应用的安全性和用户体验。 在Struts2中,表单验证主要依赖于两个核心组件:Action类和Validator...

    Struts-Validate-Reset

    "Struts-Validate-Reset"主题主要关注的是在Struts验证框架中如何实现表单数据的重置操作。 验证(Validate)在Struts中通常是通过ActionForm类的子类来完成的。ActionForm是MVC模式中的模型层组件,它负责接收并...

    Struts2输入校验总结

    综上所述,Struts2的输入校验机制不仅支持基本的手动校验,还提供了高度可配置和扩展的验证框架,使得开发者能够根据应用的具体需求,灵活地实现各种校验逻辑,从而提升应用程序的质量和用户体验。

    Struts的验证框架Validate使用[2]

    在本文中,我们将深入探讨Struts的验证框架Validate的使用方法,以及它在实际开发中的应用。 1. **验证框架概述** Struts的验证框架是Struts 1.x中的核心功能之一,它允许开发者定义一组验证规则,并在用户提交...

    struts2图片验证码--struts2图片验证码-(通用版)

    ### Struts2 图片验证码实现解析 #### 一、引言 在Web应用程序中,图片验证码(CAPTCHA)被广泛用于防止自动化攻击和机器人操作,确保用户是真实的人类。Struts2框架提供了丰富的功能来集成这样的安全特性,本文将...

    struts 2 之旅 - 简单的程序 登陆

    Struts 2 是一款强大的Java Web开发框架,它在MVC(Model-View-Controller)设计模式的基础上,提供了丰富的功能和灵活的配置,使得开发者能够更高效地构建动态Web应用程序。"Struts 2 之旅 - 简单的程序 登陆"是一...

    自定义 validate验证 struts1框架

    2. **添加验证方法**:在ActionForm子类中,你需要为每个需要验证的字段添加一个对应的`validate`方法。这些方法通常以`validateField`的形式命名,例如`validateName`、`validateEmail`等。在这些方法内部,你可以...

    struts的validate框架验证

    Struts的Validate框架是Java Web开发中用于处理用户输入验证的一种工具,它是Struts框架的重要组成部分,主要用于在MVC(Model-View-Controller)架构中确保用户提交的数据满足应用程序设定的规则。在MyEclipse 6.0...

    在Eclipse中配置Struts2项目(html)手把手教会你 +struts2 标签库介绍(html) + STRUTS2学习文档.pdf + Struts2―表单验证validate(html) + struts2和struts的比较 + struts教程(html)

    在Eclipse中配置Struts2...Struts2―表单验证validate(html)对validate的type属性校验类型以及param 做了详细的解释说明。 struts2和struts的比较 让你更清楚的知道struts2和struts的不同之处。 struts教程(html)

    更加复杂的Struts validate验证

    在Struts框架中,validate验证是处理用户输入的重要环节,它确保了数据的有效性和安全性。 在Struts的validate验证机制中,主要涉及到以下几个关键知识点: 1. **ActionForm**:在Struts中,ActionForm类用于封装...

    使用struts2进行输入校验

    总结来说,Struts2提供了灵活的输入校验机制,允许开发者通过Action的`validate()`方法或者XML配置文件来定义验证规则。无论选择哪种方式,都能有效地确保从客户端接收的数据符合预期,从而提高了应用的安全性和用户...

Global site tag (gtag.js) - Google Analytics