/day31/src/cn/itcast/web/struts2/user/UserAction.java

package cn.itcast.web.struts2.user;

import com.opensymphony.xwork2.ActionContext;

public class UserAction {
//表单参数
private String username;
private String password;
//提供对应的setter方法(拦截器会将表单参数通过setter方法自动注入进来)
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
//注册的业务控制方法
public String registerMethod(){
System.out.println("用户名:" + username);
System.out.println("密码:" + password);
//将用户名和密码绑定到域对象
ActionContext.getContext().put("username",username);
ActionContext.getContext().put("password",password);
return "success";
}
}

/day31/WebRoot/register.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type="text/javascript" src="js/jquery-1.8.2.js"></script>
<script type="text/javascript" >
$(function(){
$("form").submit(function(){
var flag=false;
var username=$(":text:first").val();
var password=$(":text:last").val();
username=$.trim(username);
password=$.trim(password);
if(username!=null&&username.length>0&&password!=null&password.length>0){
flag=true;
}else{
alert("不能为空");
}
return flag;
});
});
</script>
</head> <body>
<form action="/day31/register" method="post">
<table border="2" align="center">
<caption><h3>新用户注册(struts2版本)</h3></caption>
<tr>
<th>用户名</th>
<td><input type="text" name="username" maxlength="10"/></td>
</tr>
<tr>
<th>密码</th>
<td><input type="text" name="password" maxlength="6"/></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="注册"/>
</td>
</tr>
</table>
</form>
</body>
</html>

/day31/WebRoot/WEB-INF/register_success.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
注册成功<br/>
用户名:${requestScope.username}<br/>
密 码:${requestScope.password}<br/>
  <!-- 底层调用get方法 -->
</body>
</html>

二:/day31/src/cn/itcast/web/struts2/user/UserAction.java

package cn.itcast.web.struts2.user;

public class UserAction {
//表单参数
private String username;
private String password;
//提供对应的setter方法(拦截器会将表单参数通过setter方法自动注入进来)
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
//EL取值,提供对应的getter方法 和拦截器栈有关
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
//注册的业务控制方法
public String registerMethod(){
System.out.println("用户名:" + username);
System.out.println("密码:" + password);
return "success";
}
}

拦截器会默认将Action类的实例变量绑定在request域对象中,默认是空值,框架让拦截器将实例变量的值注入(setUsername("qe")),将转发改为重定向

<result name="success" type="redirect">
/register_success.jsp
</result>

改之后在success.jsp中不能取出值(重定向不是一个request)

[问题:用redirect时放在WEB-INF下访问不到]


*六)Action中业务方法的验证【数据格式的验证,属于后台验证】
(1)在Action中写多个类似的业务控制方法
相类似的业务控制方法,应该放在同一个Action中。

/day31/WebRoot/login.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<form action="/day31/login" method="post">
<table border="2" align="center">
<caption><h3>用户登录(struts2版本)</h3></caption>
<tr>
<th>用户名</th>
<td><input type="text" name="username" maxlength="10"/></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="登录"/>
</td>
</tr>
</table>
</form>
</body>
</html>

/day31/WebRoot/WEB-INF/login_success.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
登录成功<br/>
用户名:${requestScope.username}<br/>
</body>
</html>

/day31/src/cn/itcast/web/struts2/validator/ValidatorUserAction.java

package cn.itcast.web.struts2.validator;

import com.opensymphony.xwork2.ActionSupport;

//演示表单验证【后台】
public class ValidatorUserAction {
private String username;//哈哈
private String password;//NULL
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 registerMethod(){
return "registerSuccess";
}
//登录业务控制方法[后]
public String loginMethod(){
return "loginSuccess";
}
}

/day31/src/cn/itcast/web/struts2/validator/struts_validator.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>
<package name="validator" extends="struts-default" namespace="/"> <!-- 用户注册 -->
<action
name="register"
class="cn.itcast.web.struts2.validator.ValidatorUserAction"
method="registerMethod">
<result name="registerSuccess" type="dispatcher">
/WEB-INF/register_success.jsp
</result>
</action> <!-- 用户登录-->
<action
name="login"
class="cn.itcast.web.struts2.validator.ValidatorUserAction"
method="loginMethod">
<result name="loginSuccess" type="dispatcher">
/WEB-INF/login_success.jsp
</result>
</action> </package>
</struts>

struts.xml包含

<include file="cn/itcast/web/struts2/validator/struts_validator.xml"/>


(2)验证Action中所有业务控制方法【validate()】
validate()针对Action中的每一个业务控制方法而言。

(4)收集Action中验证失败的消息,在jsp页面中显示【<s:fielderror fieldName="username"/>】
【用户注册和登录】

/day31/src/cn/itcast/web/struts2/validator/ValidatorUserAction.java

package cn.itcast.web.struts2.validator;

import com.opensymphony.xwork2.ActionSupport;

//演示表单验证【后台】
public class ValidatorUserAction extends ActionSupport{
private String username;//哈哈
private String password;//NULL
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;
}
//---------------------------------------以下是针对所有业务控制的验证方法 @Override
public void validate() {
//在set方法传入之后由框架(栈中的某个拦截器)调用,会把错误消息放到一个集合中,如果集合为空或长度为0则验证成功
//验证成功,调用下面的业务控制方法;验证失败,调用input属性所指明的页面
//ActionSupport的TextProvider接口负责错误消息的绑定
if(this.username!=null && this.username.trim().length()>0){
;
}else{
//收集错误消息
this.addFieldError("username","用户名必填");//("域名称","错误消息")
}
if(this.password!=null && this.password.trim().length()>0){
;
}else{
this.addFieldError("password","密码必填");
}
}
//---------------------------------------以下是业务控制方法 //注册业务控制方法[再]
public String registerMethod(){
return "registerSuccess";
}
//登录业务控制方法[后]
public String loginMethod(){
return "loginSuccess";
}
}

/day31/src/cn/itcast/web/struts2/validator/struts_validator.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>
<package name="validator" extends="struts-default" namespace="/"> <!-- 用户注册 -->
<action
name="register"
class="cn.itcast.web.struts2.validator.ValidatorUserAction"
method="registerMethod">
<result name="registerSuccess" type="dispatcher">
/WEB-INF/register_success.jsp
</result>
<!-- 出错后,框架会调用input属性所对应的页面 -->
<result name="input" type="dispatcher">
/register.jsp
</result>
</action> <!-- 用户登录-->
<action
name="login"
class="cn.itcast.web.struts2.validator.ValidatorUserAction"
method="loginMethod">
<result name="loginSuccess" type="dispatcher">
/WEB-INF/login_success.jsp
</result>
<!-- 出错后,框架会调用input属性所对应的页面 -->
<result name="input" type="dispatcher">
/login.jsp
</result>
</action> </package>
</struts>

/day31/WebRoot/register.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type="text/javascript" src="js/jquery-1.8.2.js"></script>
<script type="text/javascript" >
$(function(){
$("form").submit(function(){
var flag=false;
var username=$(":text:first").val();
var password=$(":text:last").val();
username=$.trim(username);
password=$.trim(password);
if(username!=null&&username.length>0&&password!=null&password.length>0){
flag=true;
}else{
alert("不能为空");
}
return flag;
});
});
</script>
</head> <body>
<form action="/day31/register" method="post">
<table border="2" align="center">
<caption><h3>新用户注册(struts2版本)</h3></caption>
<tr>
<th>用户名</th>
<td><input type="text" name="username" maxlength="10"/></td>
<td>
<!-- 将出错的消息,取得并显示 -->
<s:fielderror fieldName="username"/>
</td>
</tr>
<tr>
<th>密码</th>
<td><input type="text" name="password" maxlength="6"/></td>
<td>
<s:fielderror fieldName="password"/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="注册"/>
</td>
</tr>
</table>
</form>
</body>
</html>

/day31/WebRoot/login.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<form action="/day31/login" method="post">
<table border="2" align="center">
<caption><h3>用户登录(struts2版本)</h3></caption>
<tr>
<th>用户名</th>
<td><input type="text" name="username" maxlength="10"/></td>
<td>
<!-- 将出错的消息,取得并显示 -->
<s:fielderror fieldName="username"/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="登录"/>
</td>
</tr>
</table>
</form>
</body>
</html>

定义一个Action类时的几种语法方式: 
(1) 直接实现自己的Action(2) 实现Action接口 (3) 继承ActionSupport接口

ActionSupport接口实现的接口: 
(1) Action接口:提供5个常量和一个excute()方法。 
(2) Validateable接口:提供validate()方法,重写此方法可以对表单数据进行验证。

(3) ValidationAware接口:该接口定义了一些方法来对Action执行过程中产生的信息进行处理。 
(4) TextProvider接口:该接口提供了一系列getText()方法,用于获取国际化资源信息。 
(5) LocalProvider接口:提供一个getLocal()方法,用于国际化时获取语言。

(3)验证Action中某个业务控制方法【validateXxx()】

validateXxx()针对Action中的某一个业务控制方法而言。Xxx表示业务控制方法的名称,第一X大写。业务控制方法,就是与execute同签名的方法

当一个Action中,同时出现validate()和validateXxx()方法时,按如下次序执行:
validateXxx()    validate()    registerMethod()[如果验证成功了,才会执行xxx方法]

/day31/src/cn/itcast/web/struts2/validator/ValidatorUserAction.java

package cn.itcast.web.struts2.validator;

import com.opensymphony.xwork2.ActionSupport;

//演示表单验证【后台】
public class ValidatorUserAction extends ActionSupport{
private String username;//哈哈
private String password;//NULL
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;
}
//---------------------------------------以下是争对所有业务控制的验证方法
@Override
public void validate() {
}
//---------------------------------------以下是争对某个业务控制的验证方法 //专用于注册验证方法[先]
public void validateRegisterMethod(){
if(this.username!=null && this.username.trim().length()>0){
if(this.username.matches("[\u4E00-\uFA29]+")){
;
}else{
this.addFieldError("username","用户名必填是中文");
}
}else{
this.addFieldError("username","用户名必填");
}
if(this.password!=null && this.password.trim().length()>0){
if(this.password.matches("[0-9]{6}")){
;
}else{
this.addFieldError("password","密码必须是6位数字");
}
}else{
this.addFieldError("password","密码必填");
}
}
//专用于登录验证方法[先]
public void validateLoginMethod(){
if(this.username!=null && this.username.trim().length()>0){
if(this.username.matches("[\u4E00-\uFA29]+")){ }else{
this.addFieldError("username","用户名必填是中文");
}
}else{
this.addFieldError("username","用户名必填");
}
} //---------------------------------------以下是业务控制方法 //注册业务控制方法[再]
public String registerMethod(){
return "registerSuccess";
}
//登录业务控制方法[后]
public String loginMethod(){
return "loginSuccess";
}
}

(5)表单Action后台验证的更多相关文章

  1. Django之form表单提交并验证

    1.提交的时候会报错 2. 需要在setting里面注释掉一句话,关闭跨站请求检查. 3. 注释掉以后,理论上就不报错了.可我还是卡壳了. 4. 通过在网上找方法,修复错误. 原因:表单action字 ...

  2. javascprit form表单提交前验证以及ajax返回json

    1.今天要做一个手机验证码验证的功能.需求是前端页面点击发送 短信验证码,后台接收后通过ajax返回到前端,之后前端在提交时候进行验证.思路很简单,不过做的过程还是学到不少的东西. 1.ajax请求后 ...

  3. 如何通过submit提交form表单获取后台传来的返回值

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_34651764/article/details/76373846 小伙伴是不是遇到过这样的问题 ...

  4. 推荐几款很棒的 JavaScript 表单美化和验证插件

    表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让开发者花费了大量的时间和精力去处理,以期实现好用又漂亮的表单功能 ...

  5. form表单的ajax验证2

    form表单的ajax验证2: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...

  6. 在Tomcat中采用基于表单的安全验证

    .概述   (1)基于表单的验证 基于From的安全认证可以通过TomcatServer对Form表单中所提供的数据进行验证,基于表单的验证使系统开发者可以自定义用户的登陆页面和报错页面.这种验证方法 ...

  7. 如何在.Net Core MVC中为动态表单开启客户端验证

    非Core中的请参照: MVC的验证 jquery.validate.unobtrusive mvc验证jquery.unobtrusive-ajax 参照向动态表单增加验证 页面引入相关JS: &l ...

  8. 第一百八十六节,jQuery,验证表单插件,Ajax 表单插件,验证和提交表单

    jQuery,验证表单插件,Ajax 表单插件,验证和提交表单 HTML <form id="reg" method="post" action=&quo ...

  9. [Swift通天遁地]二、表格表单-(8)快速实现表单的输入验证

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

随机推荐

  1. C 语言实例

    C 语言实例 C 语言实例 - 输出 "Hello, World!" C 语言实例 - 输出整数 C 语言实例 - 两个数字相加 C 语言实例 - 两个浮点数相乘 C 语言实例 - ...

  2. 网络电台(WIZ550io)

    网络电台是用WIZ550io(内嵌MAC地址)和ATMEGA1284(Flash 128K,EEPROM4K)制作的.用户可注冊多达80个无线电广播. 无线电广播的注冊可在内嵌网页中进行. 网络电台的 ...

  3. 利用动态图添加Loading动画

    opacity:CSS3中的属性,调节透明度,一般取值0.5 添加思想: 1.对超链接添加点击事件,通过new {@onclick="showLoading()"} Html.Ac ...

  4. iPhone X

    iPhone X前置深度摄像头带来了Animoji和face ID,同时也将3D Face Tracking的接口开放给了开发者.有幸去Cupertino苹果总部参加了iPhone X的封闭开发,本文 ...

  5. Android加载网络图片学习过程

    好多应用,像我们公司的<乘友>还有其他的<飞鸽><陌陌><啪啪>这些,几乎每一款应用都需要加载网络图片,那ToYueXinShangWan,这是比须熟练 ...

  6. 广告banner:手动滑动切换,自动切换,点击跳转,异步加载网络图片

    效果图: 该banner功能有自动切换图片,点击图片可以自定义事件,手动滑动切换,异步加载图片 代码说话: 布局文件: <!-- 广告位 --> <FrameLayout andro ...

  7. 15:取近似值ApproximateValue

    题目描述 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值.如果小数点后数值大于等于5,向上取整:小于5,则向下取整. 输入描述:输入一个正浮点数值 输出描述:输出该数值的近似整数值 输入例子 ...

  8. easyNetq demo

    本demo包含一个类库,2个console程序 1.新建类库  MQHelper,控制台程序  consumer和proc ,控制台程序引用MQHelper 2.使用nuget安装easynwtq 和 ...

  9. hibernate的一级缓存和二级缓存详解

    hibernate为我们提供了一级缓存和二级缓存,目的是为了减少应用程序对数据库的访问次数. 一级缓存: (1)所谓一级缓存就是session级别的缓存,当我们使用他的范围是当前的session,当s ...

  10. SAP Sybase SQLAnywhere[ASA]数据库中数据行的存储机制

    SQLAnywhere[ASA]数据库(以下简称ASA)中的数据库文件,是如何存储普通的表的记录行呢?插入.更新.删除时,记录行的存储会有什么变化? 了解了这些,才能更好的理解如何对ASA数据库进行调 ...