struts2(三)---struts2中的服务端数据验证框架validate
2015-09-06 20:21
471 查看
struts2为我们提供了一个很好的数据验证框架–validate,该框架可以很方便的实现服务端的数据验证。
->验证通过:会执行execute的相应操作。
->验证失败:
–>定义了失败后的return结果:比如error,会在struts.xml中找到error对应的页面予以显示,并将错误信息按你写的方式展示。
–>未定义return结果,默认返回INPUT,你需要在struts.xml中定义input对应的页面,否则会报错。
如果表单中的某个字段不合法,我们可以返回给客户端,这是要使用addFieldError(“字段name”,”错误信息”)方法来实现。
–> this.addFieldError(“name”,”昵称长度不得小于5”);
会将错误信息显示到name对应的文本框的上方
–> this.addFieldError(“”,”昵称长度不得小于5”);
不会显示错误信息,但是如果在页面上加入会显示在该标签的位置,小编测试发现如果把标签写在表单内部,错误信息将显示在整个表单的上方。
–>如果有多条信息
this.addFieldError(“name”,”昵称长度不得小于5”);
this.addFieldError(“password”,”密码长度不得小于12”);
或者
this.addFieldError(“”,”昵称长度不得小于5”);
this.addFieldError(“”,”密码长度不得小于12”);
也会全部显示的
下面是一个例子:
1.项目文件如下:
2.web.xml
3.struts.xml
4.UserBean.java
5.LoginAction.java
6.login.jsp
7.welcome.jsp
ActionSupport类提供了一个validate()方法,当我们需要在某一个action中进行数据验证时,可以重写这个方法。数据验证往往是在客户端向服务端提交表单信息时进行的,比如execute方法负责处理表单信息并返回相应的结果,在此之前,validate会先对提交的表单信息进行验证:
->验证通过:会执行execute的相应操作。
->验证失败:
–>定义了失败后的return结果:比如error,会在struts.xml中找到error对应的页面予以显示,并将错误信息按你写的方式展示。
–>未定义return结果,默认返回INPUT,你需要在struts.xml中定义input对应的页面,否则会报错。
需要注意的是,validate会对所有方法都进行数据验证,为了针对某一个方法进行数据验证,可以定义一个方法,方法名为validate+需要验证的方法(首字母大写),比如validateExecute会验证提交给execute的表单数据,validateLogin会验证提交给login方法的表单数据。个人认为尽量不要重写validate方法,而是全部使用validate+方法名的方式来编程。
如果表单中的某个字段不合法,我们可以返回给客户端,这是要使用addFieldError(“字段name”,”错误信息”)方法来实现。
–> this.addFieldError(“name”,”昵称长度不得小于5”);
会将错误信息显示到name对应的文本框的上方
–> this.addFieldError(“”,”昵称长度不得小于5”);
不会显示错误信息,但是如果在页面上加入会显示在该标签的位置,小编测试发现如果把标签写在表单内部,错误信息将显示在整个表单的上方。
–>如果有多条信息
this.addFieldError(“name”,”昵称长度不得小于5”);
this.addFieldError(“password”,”密码长度不得小于12”);
或者
this.addFieldError(“”,”昵称长度不得小于5”);
this.addFieldError(“”,”密码长度不得小于12”);
也会全部显示的
下面是一个例子:
1.项目文件如下:
2.web.xml
<?xml version="1.0" encoding= "UTF-8"?> <web-app version= "3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" > < display-name></display-name > <!-- 配置过滤器类 --> < filter> <filter-name >struts2 </filter-name > <!-- 从struts-2.1.3以后,org.apache.struts2.dispatcher.FileDispatcher值被标注为过时,现在是如下写法 --> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class > </filter > <!-- 过滤器用来初始化struts2并处理所有web请求 --> <filter-mapping > <filter-name >struts2 </filter-name > <url-pattern >/* </url-pattern > </filter-mapping > < welcome-file-list> <welcome-file >index.jsp </welcome-file > </ welcome-file-list> </web-app>
3.struts.xml
<?xml version="1.0" encoding= "UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- struts基本配置内容 --> <!-- package-name:用于区别不同的package;必须是唯一的、可用的变量名;用于其它package来继承; package- namespace:用于减少重复代码(和struts1比较);是调用action时输入路径的组成部分; package-extends:用于继承其它package以使用里面的过滤器等东东; --> <package name ="struts" namespace="" extends= "struts-default"> <!-- action-name:用于在一个package里区别不同的action;必须是唯一的、可用的变量名;是调用action时输入路径的组成部分; action-class:action所在的路径(包名+类名); action-method:action所调用的方法名; 默认执行execute,所以execute可以不写 --> <action name ="login" class="action.LoginAction" method= "execute"> <result name ="success">/welcome.jsp</ result> <result name ="index">/login.jsp</ result> <result name ="input">/login.jsp</ result> </action > <action name ="index" class="action.LoginAction" method= "index"> <result name ="index">/login.jsp</ result> </action > </package > </struts>
4.UserBean.java
package bean; public class UserBean { //封装表单项,即表单中有的字段,且要相对应 private String name; private String password; //封装非表单项,即表单中没有该属性,此处info用来存放服务器返回给页面的信息 private String info; public String getName() { return name; } public void setName(String name) { this. name = name; } public String getPassword() { return password; } public void setPassword(String password) { this. password = password; } public String getInfo() { return info; } public void setInfo(String info) { this. info = info; } }
5.LoginAction.java
package action; import bean.UserBean; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; /** * Action 用来处理业务逻辑,根据分层的思想,实体对象的属性不宜放在Action中,所以将其封装为实体bean。 * * 而要在action中使用该bean,就要使用ModelDriver(模型驱动),使用ModelDriver要继承ModelDriven类。 * * */ public class LoginAction extends ActionSupport implements ModelDriven<UserBean>{ private UserBean model; @Override public UserBean getModel() { if(model == null){ model = new UserBean(); } return model; } public String index(){ return "index"; } public String execute(){ //会自动取出页面表单中的值 if("sa".equals(this.getModel().getName().trim())&&"aaaaaa".equals(this.getModel().getPassword().trim())){ this.getModel().setInfo("登陆成功"); return SUCCESS; }else{ this.getModel().setInfo("登陆失败"); return "index"; } } /** * 在执行方法时,验证数据的合法性,方法名是validate+方法名(首字母大写) * 直接写validate会对所有方法都验证 */ public void validateExecute(){ if(this.getModel().getPassword().trim().length() == 0){ //返回错误信息 //*注意 : 如果验证有错且没有指定return字符串的话,默认返回的是INPUT //第一个参数可以为页面表单字段,比如model.password 这时会显示在文本框上部 //第一个参数如果为空 可在页面上通过<s:fielderror />标签来显示 this.addFieldError("", "密码不能为空"); this.addFieldError("", "密码不能为空"); } } }
6.login.jsp
<%@ page language ="java" import="java.util.*" pageEncoding= "UTF-8"%> <%@ taglib prefix ="s" uri="/struts-tags" %> <!DOCTYPE html> <html> < head> <title >登录 </title > </ head> < body> <!-- 要获取struts2的数据验证后返回的信息,必须使用struts2标签 --> <s:form action ="login"> <s:textfield label ="登录名" name= "model.name"></s:textfield > <s:textfield label ="密码" name= "model.password"></s:textfield > <s:submit value ="登录"></ s:submit> </s:form > <!-- 用于显示服务器addFieldError方法返回的全部错误信息 --> <s:fielderror /> </ body> </html>
7.welcome.jsp
<%@ page language ="java" import="java.util.*" pageEncoding= "utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://" +request.getServerName()+":" +request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> < head> <base href ="<%=basePath%> "> <title >info </title > </ head> < body> <!-- 写法一 从request取 --> ${request.model.name}<br /> ${request.model.info}<br /> <!-- 写法二 从值栈取(值栈后边再细究) --> ${model.name}<br /> ${model.info}<br /> <!-- 简写 --> ${name}<br /> ${info}<br /> </ body> </html>
相关文章推荐
- struts2(三)---struts2中的服务端数据验证框架validate
- Eclipse导入Android项目步骤
- eclipse格式化代码快捷键无效与搜狗输入法莫名变为繁体
- Java中的Serializable浅谈,只是浅谈
- Spring MVC + Hibernate + Maven: Crud操作示例
- Spring之ContextLoaderListener的作用
- 我是菜鸟:java数据库操作基本知识
- 使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境
- JAVA随笔(一)
- MyBatis学习总结——Mybatis3.x与Spring4.x整合
- SSM框架—详细整合教程(Spring+SpringMVC+MyBatis)
- 谈谈我所理解的Hibernate
- SpringMVC—接收请求参数和页面传参
- Java学习笔记20150907
- HDU 5429-Geometric Progression(JAVA大数判断等比数列)
- JavaSwing基本控件汇总
- spring mvc注解文件上传下载
- JAVA学习——多线程通信
- java的接口和抽象类的理解
- 【Spring】Spring关键策略及Spring容器