(5)表单Action后台验证
/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后台验证的更多相关文章
- Django之form表单提交并验证
1.提交的时候会报错 2. 需要在setting里面注释掉一句话,关闭跨站请求检查. 3. 注释掉以后,理论上就不报错了.可我还是卡壳了. 4. 通过在网上找方法,修复错误. 原因:表单action字 ...
- javascprit form表单提交前验证以及ajax返回json
1.今天要做一个手机验证码验证的功能.需求是前端页面点击发送 短信验证码,后台接收后通过ajax返回到前端,之后前端在提交时候进行验证.思路很简单,不过做的过程还是学到不少的东西. 1.ajax请求后 ...
- 如何通过submit提交form表单获取后台传来的返回值
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_34651764/article/details/76373846 小伙伴是不是遇到过这样的问题 ...
- 推荐几款很棒的 JavaScript 表单美化和验证插件
表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让开发者花费了大量的时间和精力去处理,以期实现好用又漂亮的表单功能 ...
- form表单的ajax验证2
form表单的ajax验证2: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...
- 在Tomcat中采用基于表单的安全验证
.概述 (1)基于表单的验证 基于From的安全认证可以通过TomcatServer对Form表单中所提供的数据进行验证,基于表单的验证使系统开发者可以自定义用户的登陆页面和报错页面.这种验证方法 ...
- 如何在.Net Core MVC中为动态表单开启客户端验证
非Core中的请参照: MVC的验证 jquery.validate.unobtrusive mvc验证jquery.unobtrusive-ajax 参照向动态表单增加验证 页面引入相关JS: &l ...
- 第一百八十六节,jQuery,验证表单插件,Ajax 表单插件,验证和提交表单
jQuery,验证表单插件,Ajax 表单插件,验证和提交表单 HTML <form id="reg" method="post" action=&quo ...
- [Swift通天遁地]二、表格表单-(8)快速实现表单的输入验证
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
随机推荐
- struts2获取ServletContext对象
CreateTime--2017年9月7日09:24:40 Author:Marydon struts2获取ServletContext对象 需要导入: import javax.servlet. ...
- Oracle TNS路径
修改tnsnames.oRA,监听文件 Oracle TNS路径 G:\Oracle\product\11.2.0\client_1\network\admin\tnsnames.oRA
- ordinal parameter mismatch
© 版权声明:本文为博主原创文章,转载请注明出处 错误描述:Caused by: org.hibernate.HibernateException: ordinal parameter mismatc ...
- *Android 多线程下载 仿下载助手
今天带来一个多线程下载的 样例.先看一下效果.点击 下载 開始下载,同一时候显示下载进度.完成下载,变成程 安装,点击安装 提示 安装应用. 界面效果 线程池 ThreadPoolExecutor , ...
- hibernate 配置文件无自动提示
在编辑 *.hbm.xml 文件时,myeclipse 带有自动提示功能,但 eclipse 是没有自动提示功能的.需要自己手工加上: 1.打开项目中任意一个 *.hbm.xml ...
- Unix下C语言开发工具
在Unix下进行C语言开发有一套工具,主要有: 编译器:cc,gcc,clang SSH登录工具:putty,xshell就不说了,尼玛还有后门 make工具:跟Maven一样是项目构建工具,这个使用 ...
- php解码“&#”编码的中文用函数html_entity_decode()
遇到类似 ' 这种编码的字,我们可以用html_entity_decode()函数来解码. html_entity_decode() 函数把 HTML 实体转换为字符. 语法 html_entity_ ...
- urllib与urllib2的学习总结(python2.7.X): python urllib与urllib2
https://www.cnblogs.com/wly923/archive/2013/05/07/3057122.html
- iOS-代理托付的使用
#import "Rigester_ViewController.h" #import "Rigester_ViewController.h" @interfa ...
- hive job oom问题
错误信息例如以下:Container [pid=26845,containerID=container_1419056923480_0212_02_000001] is running beyond ...