RegisterAction.java
package org.zbq.struts2;
import java.util.Calendar;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport {
private String username;
private String password;
private String repassword;
private int age;
private Date birthday;
private Date graduate;
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 String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Date getGraduate() {
return graduate;
}
public void setGraduate(Date graduate) {
this.graduate = graduate;
}
@Override
public String execute() throws Exception {
System.out.println("execute invoked");
return SUCCESS;
}
@Override
public void validate() {
System.out.println("validate invoked");
if(null == username || username.length() < 4 || username.length() > 6){
this.addActionError("username invalid");
this.addFieldError("username", "username invalid");
}
if(null == password || password.length() < 4 || password.length() > 6){
this.addActionError("password invalid");
}
if(null == repassword || repassword.length() < 4 || repassword.length() > 6){
this.addActionError("repassword invalid");
}
if(!password.equals(repassword)){
this.addActionError("the passwords not the same");
}
if(age < 10 || age >50){
this.addActionError("age invalid");
}
if(null == birthday){
this.addActionError("birthday invalid");
}
if(null == graduate){
this.addActionError("graduate invalid");
}
if(null != birthday && null != graduate){
Calendar c1 = Calendar.getInstance();
c1.setTime(birthday);
Calendar c2 = Calendar.getInstance();
c2.setTime(graduate);
if(!c1.before(c2)){
this.addActionError("birthday should be before graduation");
}
}
}
}
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="struts2" extends="struts-default">
<action name="register" class="org.zbq.struts2.RegisterAction">
<result name="success">/registerResult.jsp</result>
<result name="input">/register.jsp</result>
</action>
</package>
</struts>
register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'register.jsp' starting page</title>
</head>
<body>
<h3>user register</h3>
<s:actionerror cssStyle="color:red"/>
---------------------------------------
<s:fielderror cssStyle="color:blue"/>
<s:form action="register" theme="simple">
username:<s:textfield label="username" name="username"></s:textfield><br/>
password:<s:password label="password" name="password"></s:password><br/>
repassword:<s:password label="repassword" name="repassword"></s:password><br/>
age:<s:textfield label="age" name="age"></s:textfield><br/>
birthday:<s:textfield label="birthday" name="birthday"></s:textfield><br/>
graduate:<s:textfield label="graduate" name="graduate"></s:textfield><br/>
<s:submit value="submit"></s:submit>
</s:form>
<!--
<form action="register.action">
<h3>username:<input type="text" name="username" size="20"/><br/></h3>
<h3>password:<input type="password" name="password"/><br/></h3>
<h3>repassword:<input type="password" name="repassword"/><br/></h3>
<h3>age:<input type="text" name="age" name="age" size="20"><br/></h3>
<h3>birthday:<input type="text" name="birthday" size="20"><br/></h3>
<h3>graduate:<input type="text" name="graduate" size="20"/><br/></h3>
<input type="submit" value="submit"/>
</form>
-->
</body>
</html>
registerResult.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'registerResult.jsp' starting page</title>
</head>
<body>
username: <s:property value="username"/><br/>
password: <s:property value="password"/><br/>
age: <s:property value="age"/><br/>
birthday <s:property value="birthday"/><br/>
graduate <s:property value="graduate"/><br/>
</body>
</html>
1. struts2对8个数据类型以及Date,String等常见类型实现自动转换;对于自定义类型需要自己指定类型转换方式
2. 对于自定义类型转换器来说需要提供3个信息:Action的名字、Action中待转换的属性名以及该属性对应的类型转换器。其中Action的名字是通过属性文件名来获得的、Action中待转换的属性名是通过属性文件中的key来获得的,该属性对应的类型转换器是通过key所对应的value来获得的。
3.可以通过Struts2自带的类型转换器StrutsTypeConverter简化类型装换代码的编写,StrutsTypeConverter继承与DefaultTypeConverter父类,并且提供了两个抽象方法:convertFormString与convertToString,分别表示从页面的字符串转换为后台对象以及从后台对象转换为页面的字符串,我们只需实现这两个抽象方法即可实行类型转换。
4. 全局类型转换。在src目录下新建xwork-comversion.properties,该文件的内容是待转换的类=转换器的名字,即:
org.zbq.bean.User=org.zbq.converter.UserConverter
5. Struts2也支持自定义方法,在struts.xml中的action元素内定义method属性,属性值就是待执行的方法。其中该方法的声明要与execute保持一致。但是不推荐这种方式,因为它容易导致Action代码混乱。
6.执行流程
1). 首先进行类型装换
2). 进行校验(执行validate方法)
3). 如果在上述过程中出现了任何错误,都不会再去执行execute方法, 转到struts.xml中该action中name=input 的result所对应的页面
7. ActionSupport类的addActionError()方法的实现:首先创建一个ArrayList对象,然后将错误消息添加到该ArrayList对象中。
8. 当调用getActionErrors()方法返回Action级别的错误信息列表时,返回的实际上是集合的一个副本而不是集合本身,因此对集合副本调用clear()方法清除的依旧是副本中的元素而非原集合中的元素,此时原集合中的内容没有收到任何的影响。换句话说,Action级别的错误信息列表对开发者来说是只读的。
9. Field Error级别的错误信息底层是用LinkedHashMap实现的,该Map的key是Sting类型,value是List<String>类型,这就表示一个Field Name 可以对应多条错误信息,这些错误信息都放置在List<String>集合当中。
分享到:
相关推荐
服务器端验证是Struts1框架的一个关键特性,用于确保用户输入的数据质量和安全性。在这个主题中,我们将深入探讨Struts1的服务器端验证机制,以及它如何处理线程安全问题。 服务器端验证的重要性在于,它可以防止...
在本文中,我们将主要介绍 Struts2 的服务器端验证机制。 Struts2 验证框架的组成 Struts2 验证框架主要由以下几个组件组成: 1. Validator Framework:Validator Framework 是 Struts2 验证框架的核心组件,负责...
Struts2的Validator插件支持基于XML或注解的服务器端验证,可以在Action类中定义验证规则。 在XML验证中,会在struts-plugin.xml或struts.xml中配置Validator的引用,然后在单独的validation.xml文件中定义每个...
在Web应用中,当用户填写并提交表单时,服务器端需要对这些数据进行检查,确保它们符合业务逻辑要求。Struts2提供了两种主要的验证方式:基于注解的验证和基于XML的验证。本例子主要关注XML形式的验证。 XML验证的...
Struts2是一个强大的Java EE应用程序框架,用于构建MVC(模型-视图-控制器)架构的Web应用。...记住,合理的服务器端验证是确保数据安全和应用性能的关键步骤,而客户端的异步验证则可以提供更好的交互体验。
在Struts框架中,表单验证通常通过两个主要方式实现:客户端验证和服务器端验证。 1. 客户端验证: 客户端验证发生在用户的浏览器上,通常使用JavaScript或jQuery等库来执行。这种方式可以即时反馈错误,提高用户...
在Struts2中,表单验证是确保数据输入有效性和一致性的关键环节,它有助于提升用户体验并减少服务器端处理错误。这篇博客文章“Struts2 表单验证验证信息显示位置及效果”探讨了如何有效地实现和展示Struts2中的表单...
在Struts2中,可以使用`<s:fielderror>`标签显示服务器端验证错误。 3. **配置校验规则**:Struts2的校验规则可以通过XML或注解方式定义。XML方式通常在struts.xml或相应的action类配置文件中定义,而注解方式则...
3. **服务器端验证**:在Action类中,你需要编写一个方法来检查用户名是否已存在于数据库中。这通常涉及到SQL查询或者使用ORM框架如Hibernate进行操作。 4. **返回响应**:一旦验证完成,Action应返回一个包含结果...
默认情况下,Struts2提供了两种验证方式:服务器端验证和客户端验证。服务器端验证发生在后台,通常在Action类中,而客户端验证则在用户浏览器中通过JavaScript进行,提供了更好的用户体验,因为它可以即时反馈错误...
Struts2验证框架简化了服务器端的输入验证,提供了一种声明式的方式定义验证规则。通过XML配置或注解,开发者可以快速地设置验证逻辑,从而确保应用程序的数据质量。了解并熟练运用这个框架,对于任何Java Web开发者...
Struts2的表单验证分为客户端验证和服务器端验证。客户端验证通常使用JavaScript进行,可以即时反馈错误,提高用户体验;服务器端验证则是强制性的,确保数据在服务器端的安全性和准确性。 二、验证配置 1. XML配置...
在Struts2中,表单验证主要分为两个阶段:客户端验证和服务器端验证。客户端验证通常使用JavaScript在用户提交表单前进行,它可以提供即时反馈,提高用户体验。而服务器端验证则是必须的,因为它可以确保即使客户端...
Struts2提供了两种验证方式:客户端验证和服务器端验证。客户端验证通常通过JavaScript在浏览器端进行,可以即时反馈错误信息,但容易被绕过;而服务器端验证是必不可少的安全环节,无论客户端验证是否通过,服务器...
Struts2提供两种主要的输入验证方式:客户端验证和服务器端验证。 1. 客户端验证:通过JavaScript在用户提交表单前检查输入,可以提供实时反馈,但安全性较低,因为JavaScript可以被禁用或篡改。 2. 服务器端验证:...
而后端验证则是在服务器端进行,确保即使用户禁用了JavaScript,也能保证数据安全。 Struts2提供了多种方式来实现后端验证,包括注解验证、XML配置和编程式验证。注解验证是最常用的方式,只需在Action类的字段上...
在Struts2验证框架中,主要有两种验证方式:客户端验证和服务器端验证。客户端验证通常使用JavaScript在用户提交表单前进行,可以提供实时反馈,提升用户体验。而服务器端验证是必不可少的安全层,确保即使客户端...
2017年,一个名为CVE-2017-9805的重大漏洞被发现,它允许远程攻击者通过恶意构造的HTTP请求头注入任意的OGNL表达式,从而执行服务器端代码,这可能导致数据泄露、系统权限提升甚至完全控制服务器。 "struts2-scan...
- 避免在JSP页面中进行服务器端验证,以提高性能和安全性。 9. **总结** Struts动态表单验证是一个强大的工具,能适应不断变化的业务需求。通过理解和掌握这一技术,开发者可以创建更加健壮、灵活的Web应用程序,...
Struts2 作为一款强大的 Web 应用框架,不仅提供了丰富的服务器端验证功能,还支持实时的客户端验证,极大地提高了开发效率和用户体验。对于希望深入学习 Java Web 开发技术的同学来说,掌握 Struts2 的验证机制是...