/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. MAC - 命令行中用sublime打开指定文件,使用ln命令建立软链接

    眼下sublime是mac下最好的文本编辑软件.常常要使用它打开一些文件,比如html,js,txt,json等文件,可是sublime2默认不支持在命令行下调用.经过研究发现能够用建立软连接的方式调 ...

  2. FiddlerScript学习一:改动Request或Response

    前两天因项目须要,简单看了一下FiddlerScript,功能挺强的.今天有时间细致看一下,做个笔记. 改动Request或Response 改动Request和Response要在FiddlerSc ...

  3. Android开发之WebView具体解释

    概述: 一个显示网页的视图.这个类是你能够滚动自己的Web浏览器或在你的Activity中简单地显示一些在线内容的基础.它使用了WebKit渲染引擎来显示网页,包含向前和向后导航的方法(通过历史记录) ...

  4. 在Centos 7上安装配置 Apche Kafka 分布式消息系统集群

    Apache Kafka是一种颇受欢迎的分布式消息代理系统,旨在有效地处理大量的实时数据.Kafka集群不仅具有高度可扩展性和容错性,而且与其他消息代理(如ActiveMQ和RabbitMQ)相比,还 ...

  5. 总结java编程常用的快捷键

    Eclipse 常用快捷键 Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键. 1. [ALT+/] 此快捷键为用户 ...

  6. C#.Net调试时调无法“编辑并继续”

    ‘启用编辑并继续’的作用是允许用户在调试的过程中修改源代码,并且修改的代码会编译到调试进程中立刻生效. 在调试时,无法查到变量的值,也无法编辑,若编辑会跳出如下弹框: 解决方法: 1:如下图,选择De ...

  7. detect——point_in_polygon

    /******************实现功能:判断平面任一点是否在指定多边形内********************/ #include <string> #include <v ...

  8. Java下HttpUnit和Jsoup的Http抓取

    简单记录下:搜集信息-分析问题-解决问题 关于html文档的操作现成库有: HttpUnit 很老了,不更了 http://www.httpunit.org/  20 May 2008 HttpUni ...

  9. 【Java】 Spring依赖注入小试牛刀:编写第一个Spring ApplicationContext Demo

    0  Spring的依赖注入大致是这样工作的: 将对象如何构造(ID是什么?是什么类型?给属性设置什么值?给构造函数传入什么值?)写入外部XML文件里.在调用者需要调用某个类时,不自行构造该类的对象, ...

  10. [Linux] 网络

    如何在网络中标识一台计算机 IP 多个程序如何不冲突 通信端口 不同的计算机如何通信 协议 IP A类:0+7位网络号+24位主机号,可用网络2^7-2个,每个网络可容纳2^24-2个主机 B类:10 ...