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的服务器端验证,一个很好的验证配置文件,线程安全问题有保障
struts2对action中的所有方法进行校验
struts中自定义validator验证 <br>很多时候需要验证“密码”与“重复密码”是否一致,如果放在服务器端验证就浪费资源了。 如何在客户端进行验证呢?JS可以实现,但是struts的validator框架是否能实现呢?-见...
非常简单的基于XML的框架,用于Java中的客户端和服务器端验证框架。
它能够配置应用程序,方法是使用服务器端验证和错误消息,此错误消息在处理请求时呈现在调用的验证流程上,它还能够进行客户端验证,方法是使用请求页面上呈现的JavaScript。AJAX是一种JavaScript技术,它能够异步...
表现层应用JSP技术结合struts2标签,并应用JavaScript、AJAX、JQuery技术进行页面表单的客户端验证和异步服务器端验证,减少页面刷新,并运用cookie技术保存用户购物和浏览记录,提高用户体验。图书界面有用点击弹出...
这是因为某个servlet(服务器端Java程序)在应用户的请求而首次调入内存执行之后将一直驻留在内存里,对同一个servlet的后续请求不用再对这个servlet的类进行实例化,因此响应速度更快。 可是,servlet也存在一个...
11.1 在struts中用validator作服务器端验证 14 第12章 Struts HTML标签库 14 12.1 Struts中基本的HTML标签 14 12.1 Struts中表单处理的HTML标签 14 12.1 Struts中复选框和单选框的HTML标签 14 12.1 Struts下JSP页面...
服务器端的验证,Ajax技术的判断是否存在此用户,去包的但压缩包内有数据库。同时是用spring+strust+hibernate集成的工程
Struts2 Struts2核心控制流程、Ognl、Action、Interceptor、Result、FreeMarker、Struts2标记库、Struts2扩展、Struts2应用技巧(输入验证、消息国际化、文件上传和下载、防止重复提交等)。 熟练掌握Struts2核心...
3.1.2 下载并安装MySQL服务器端管理工具 64 3.1.3 下载并安装MySQL客户端查询浏览工具 65 案例3-1 连接MySQL数据库实现用户身份的验证 67 3.2 基于Oracle数据库系统的开发 73 3.2.1 安装Oracle数据库管理...
5.3 服务器端验证 5.4 实现图形验证码 5.5 避免重复提交功能 5.6 缩略加水印图像 5.7 小结 第6章 网络硬盘 6.1 网络硬盘功能原理 6.2 网络硬盘功能具体实现——浏览磁盘和显示文件信息 6.3...
一个雄心勃勃的服务器端框架。 样式 语法上很棒的样式表。 CSS 重置片段。 图标 将一堆 svg 文件连接成一个 svg 文件。 获取一堆 svg 文件并生成一个 webfont。 一个管理不同 OAuth 提供者身份验证的库。 茉莉花 ...
所有的繁重的计算和处理都由服务器端处理,运行速度快,安全稳定,数据库采用MYSQL大大减轻 了客户端用户机CPU频率受制的局限,同时绝对的安全性和稳定性是本系统最强大,最重要的设计 开发组成部分。
使用Jsp和html充当视图、而且在Jsp中大量使用了Struts标签。使用ActionForm和Validate框架完成视图层的表单验证,将表单验证移植到服务器端,可以防止客户端绕过表单验证,对数据库的注入式攻击
使用Jsp和html充当视图、而且在Jsp中大量使用了Struts标签。使用ActionForm和Validate框架完成视图层的表单验证,将表单验证移植到服务器端,可以防止客户端绕过表单验证,对数据库的注入式攻击
所有的繁重的计算和处理都由服务器端处理,运行速度快,安 全稳定,真正做到企业级电子商务需求的全面实现,数据库采用MYSQL,大大减轻了客户端用户机CPU频率受制的局限,同时绝对的安全性和稳定性是本系统 最强大,...