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`是用于处理用户输入验证的重要机制,它可以帮助开发者确保从客户端提交的数据满足预设的业务规则,从而提高应用程序的安全性和用户体验。 1. **Struts2 验证基础** Struts2的验证分为两种...
当用户提交表单时,Struts会调用ActionForm对象的validate()方法进行验证。这个方法通常是根据业务逻辑来定义的,如果验证失败,Struts会将错误消息添加到ActionErrors容器中,并跳转回表单页面显示这些错误信息。 ...
这个validate验证框架中的actiionerror级别的错误的验证提示,并包含了如何在一个Action中处理多个业务逻辑,(struts1.x 中的DispatcheAction),例子比较简单,希望对大家学习struts有所帮助。
### Struts2 自定义验证程序的实现方法详解 #### 一、Struts2 内建验证程序实现的分析 在探讨如何实现自定义验证程序之前,我们先来了解一下 Struts2 的内置验证机制。Struts2 提供了丰富的内置验证器(Validator...
总结,Struts2的数据输入验证机制提供了服务端验证和客户端验证两种策略,通过重写Java方法或配置XML文件来定义验证规则。理解并熟练运用这些机制,开发者可以创建出安全、稳定且用户体验良好的Web应用。在实际开发...
Struts2是一个流行的Java web开发框架,其在处理用户表单数据时提供了强大的验证功能,确保输入的数据符合预期的格式和规则。本文将深入探讨Struts2的表单验证机制。 首先,Struts2的输入验证分为两种方式:手动...
在Struts2中,我们可以在Action类中覆盖`validate()`方法来实现自定义的验证逻辑。这个方法会在业务逻辑执行之前被调用,检查用户提交的数据是否有效。如果验证失败,`Action`对象的`fieldErrors`属性会被填充错误...
在Struts2中,我们可以利用validate方法进行高效且灵活的前端数据验证,确保用户输入的数据满足业务规则,从而提升应用的安全性和用户体验。 在Struts2中,表单验证主要依赖于两个核心组件:Action类和Validator...
"Struts-Validate-Reset"主题主要关注的是在Struts验证框架中如何实现表单数据的重置操作。 验证(Validate)在Struts中通常是通过ActionForm类的子类来完成的。ActionForm是MVC模式中的模型层组件,它负责接收并...
综上所述,Struts2的输入校验机制不仅支持基本的手动校验,还提供了高度可配置和扩展的验证框架,使得开发者能够根据应用的具体需求,灵活地实现各种校验逻辑,从而提升应用程序的质量和用户体验。
在本文中,我们将深入探讨Struts的验证框架Validate的使用方法,以及它在实际开发中的应用。 1. **验证框架概述** Struts的验证框架是Struts 1.x中的核心功能之一,它允许开发者定义一组验证规则,并在用户提交...
### Struts2 图片验证码实现解析 #### 一、引言 在Web应用程序中,图片验证码(CAPTCHA)被广泛用于防止自动化攻击和机器人操作,确保用户是真实的人类。Struts2框架提供了丰富的功能来集成这样的安全特性,本文将...
Struts 2 是一款强大的Java Web开发框架,它在MVC(Model-View-Controller)设计模式的基础上,提供了丰富的功能和灵活的配置,使得开发者能够更高效地构建动态Web应用程序。"Struts 2 之旅 - 简单的程序 登陆"是一...
总结来说,Struts2提供了灵活的输入校验机制,允许开发者通过Action的`validate()`方法或者XML配置文件来定义验证规则。无论选择哪种方式,都能有效地确保从客户端接收的数据符合预期,从而提高了应用的安全性和用户...
Struts的Validate框架是Java Web开发中用于处理用户输入验证的一种工具,它是Struts框架的重要组成部分,主要用于在MVC(Model-View-Controller)架构中确保用户提交的数据满足应用程序设定的规则。在MyEclipse 6.0...
在Eclipse中配置Struts2...Struts2―表单验证validate(html)对validate的type属性校验类型以及param 做了详细的解释说明。 struts2和struts的比较 让你更清楚的知道struts2和struts的不同之处。 struts教程(html)
在Struts框架中,validate验证是处理用户输入的重要环节,它确保了数据的有效性和安全性。 在Struts的validate验证机制中,主要涉及到以下几个关键知识点: 1. **ActionForm**:在Struts中,ActionForm类用于封装...
2. **XML配置文件验证**:除了注解方式,也可以在struts.xml配置文件中定义validate方法,该方法会在提交表单时被自动调用,用于验证用户输入。在validate方法内,可以对字段进行检查并抛出FieldError,Struts2会...