struts2学习(2种实现验证方式)
来源:互联网 发布:json格式3d模型下载 编辑:程序博客网 时间:2024/06/14 01:52
第一种
Struts2中提供了一个com.opensymphony.xwork2.Validateable接口,此接口只有一个方法:validate()。如果有某个类实现了Validatable接口,Struts2就可以直接调用该类中的validate()方法。ActonSupport类实现Validateable接口。本文讨论此验证格式。
本文演示了一个模拟简单登录的场景:用户打开一个JSP页面,输入信息,提交登录。如果用户提交的信息格式有错误,则返回登录页面提示用户。数据格式正确则验证用户名与密码是否正确,登录成功则转向列表页面,显示当前用户的一些信息;如果登录错误则转向错误页面。
- 将表单参数封装进一个JavaBean(属性驱动);
- 如果用户输入信息有错误,直接返回提示用户再次输入;
- 如果用户名,密码错误,转向错误页面;
- 如果用户名、密码正确,则转向到另一个action类(并且传进一个id参数,用途自定),由此类处理进一步的业务逻辑,然后转向到显示列表的JSP页面。
第二种
参考:struts2:数据校验,通过XWork校验框架实现(validation.xml)
1. 修改Web.xml
2. 创建struts.xml
3. 在struts.xml中注册action和result
<action name="login" class="com.clzhang.ssh.member.action.LoginAction"> <result name="input">/ssh/demo2/login.jsp</result> <result name="error">/ssh/demo2/wrong.jsp</result> <result name="list" type="redirectAction"> <param name="idInList">${id}</param> <param name="actionName">listBook</param> </result></action> <action name="listBook" class="com.clzhang.ssh.member.action.ListAction"> <result name="showList">/ssh/demo2/bookList.jsp</result></action>
- result为list的配置指明,登录成功后,做一个redirect操作,由另一个action业务类去处理相关业务逻辑,并且在其中配置了参数传递(id字段);
- 第二个action的name为listBook,对应处理类为ListAction。
4. 创建登录JSP页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ page isELIgnored="false"%><%@ taglib uri="/struts-tags" prefix="s"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <body> <s:form action="login" method="post"> <s:textfield name="loginInfoRef.username" label="账号"></s:textfield> <br /> <s:textfield name="loginInfoRef.password" label="密码"></s:textfield> <br /> <s:submit value="提交"></s:submit> </s:form> <br /> </body></html>
注意:因为将表单封装进了JavaBean所以,表单中元素的名称有所改变,如:loginInfoRef.username,此名称必须与相关action类中的变量名称一致。
5. 创建登录表单对应的实体类
package com.clzhang.ssh.member.action;public class LoginInfo { private String username; private String password; 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; }}
6. 创建登录业务处理action类
package com.clzhang.ssh.member.action;import com.opensymphony.xwork2.ActionSupport;/** * 模拟登录 * 1.如果输入为空,提示错误,返回到登录页面; * 2.登录错误,转向错误页面; * 3.登录成功,转向列表页面。 */public class LoginAction extends ActionSupport { public static final long serialVersionUID = 1; // a.这个参数是转到列表页面需要的 private int id; // b.将JSP提交的表单封装为一个JavaBean private LoginInfo loginInfoRef; public int getId() { return id; } public void setId(int id) { this.id = id; } public LoginInfo getLoginInfoRef() { return loginInfoRef; } public void setLoginInfoRef(LoginInfo loginInfoRef) { this.loginInfoRef = loginInfoRef; } @Override // 重载ActionSupport类的方法(Validateable接口) public void validate() { super.validate(); // 验证方式一: if ("".equals(loginInfoRef.getUsername())) { this.addFieldError("loginInfoRef.username", "对不起,用户名不可以为空!"); } if ("".equals(loginInfoRef.getPassword())) { this.addFieldError("loginInfoRef.password", "对不起,密码不可以为空!"); } // 如果执行了addFieldError()/addActionError()等方法,则会转到input对应的页面 } @Override // 重载ActionSuppoer类的方法(Action接口) public String execute() { if (loginInfoRef.getUsername().equals("test") && loginInfoRef.getPassword().equals("123")) { System.out.println(loginInfoRef.getUsername() + "成功登录..."); this.setId(100); return "list"; } else { System.out.println(loginInfoRef.getUsername() + "成功失败!"); // 这些属于属于Action接口 return ERROR; } }}
7. 创建显示登录错误JSP页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ page isELIgnored="false"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <body> wrong! :( </body></html>
8. 创建生成列表的action类
package com.clzhang.ssh.member.action;import java.util.ArrayList;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;/** * 登录成功后显示的列表处理 * @author acer * */public class ListAction extends ActionSupport { public static final long serialVersionUID = 1; private ArrayList<String> bookList = new ArrayList<String>(); private int idInList; Public ArrayList<String> getBookList() { return bookList; } public void setBookList(ArrayList<String> bookList) { this.bookList = bookList; } public int getIdInList() { return idInList; } public void setIdInList(int idInList) { this.idInList = idInList; } public String execute() { bookList.add("book1"); bookList.add("book2"); bookList.add("book3"); bookList.add("book4"); bookList.add("idInList=" + idInList); ServletActionContext.getRequest().setAttribute("usernameRequest", "你现在怎样"); ServletActionContext.getRequest().getSession().setAttribute( "usernameSession", "我现在不怎样"); ServletActionContext.getServletContext().setAttribute( "usernameApplication", "你怎样"); return "showList"; }}
10. 测试
输入地址:http://127.0.0.1:8080/st/ssh/demo2/login.action第二种
通过XWork校验框架
使用validate方法校验时,如果Web应用中存在大量Action就需要多次重写validate方法,因此可以使用XWork的validator框架来对Struts2进行数据校验,减少代码量。
在com.action包下创建验证文件LoginAction-validation.xml,注:当一个Action中有多个业务处理方法是,命名规则为:actionName-methodName-validation.xml,其中actionName为Action类名,methodName为Action中某个业务处理方法的方法名,并且文件的搜索顺序与方式一种validate()和validateX()一样。
Login-validation.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"><validators> <field name="userName"> <field-validator type="requiredstring"> <message>the name should not null</message> </field-validator> </field> <field name="userPassword"> <field-validator type="requiredstring"> <message>the password should not null</message> </field-validator> </field></validators>
阅读全文
0 0
- struts2学习(2种实现验证方式)
- struts2学习(一)--表单验证的两种方式
- struts2注解方式实现数据验证
- struts2在学习(十)--表单验证的两种方式
- Struts2总结---实现Action三种方式(2)
- struts2支持三种验证方式
- Struts2-表单验证的两种方式
- struts2 表单验证的两种方式
- Struts2-表单验证的两种方式
- Struts2-表单验证的两种方式
- Struts2-表单验证的两种方式
- Struts2-表单验证的两种方式
- struts2系列学习笔记(9)---------------编程方式的验证
- struts2系列学习笔记(10)---------------配置方式的验证1
- Struts2第九讲学习笔记Action的三种实现方式,两种驱动方式
- struts2实现文件上传(验证过!)
- java验证码(采用struts2实现)
- java验证码(采用struts2实现)
- ssh免密登录
- IOI 金牌再传秘笈:水平不高怎么拿NOIP一等奖?
- python pandas 基本使用,sklearn的10种分类器实践
- JavaScript中call,apply,bind方法的总结
- 论快照回档对网站的影响(两个方面)
- struts2学习(2种实现验证方式)
- 【Sail】项目第一天简介和环境搭建
- photo-sphere-viewer.js使用时图片拉伸的问题
- 帮交互设计师判断需求该不该接的五个小原则
- C++ STL一一vector
- http://www.cnblogs.com/handk/archive/2011/03/18/1988466.html
- 【HDU】2544 最短路
- ActiveMq--02
- 欢迎使用CSDN-markdown编辑器