(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. ...
随机推荐
- JAVA_StandardServer await create[8005]怎么办
Tomcat 6.0 错误信息: 严重: StandardServer.await:create[8005]: java.net.BindException: Address already in u ...
- apue学习笔记(第九章 进程关系)
本章将详细地说明进程组以及POSIX.1引入的会话的概念.还将介绍登录shell和所有从登录shell启动的进程之间的关系 终端登录 BSD终端登录.系统管理者创建通常名为/etc/ttys的文件,其 ...
- vs调试,监控变量
- JS批量获取参数构建JSON参数对象
在做系统的时候,往往查询条件是被严格指定的,大量的查询条件,一两个页面还可以通过dom去一个一个获取,再构建参数对象,请求后台接口. 这里给大家讲一个批量获取前端参数,构建参数对象. <form ...
- 小白学习python之路(一):安装python3
引言 作为一个python小白,之前学的是java,不过听说python很流行,功能很强大,可以用很少的代码实现更强的功能,因此我也是被吸引了过来,并且把我的学习经历记录下来. 当然了,要学习 ...
- log4j:WARN Please initialize the log4j system properly.
在tomcat启动的时候,出现这个警告: log4j:WARN No appenders could be found for logger (org.apache.commons.digester. ...
- 分布式服务框架 Zookeeper(一)介绍
一.概述 ZooKeeper(动物园管理员),顾名思义,是用来管理Hadoop(大象).Hive(蜜蜂).Pig(小猪)的管理员,同时Apache Hbase.Apache Solr.LinkedIn ...
- C++钩子程序浅析
在网上搜索“键盘记录C++”实现可以找到很多相关文章,我也是照着上面的介绍去研究去试着做的,从懂到不懂.那么为什么有那么多材料我还要去写这样一篇 文章,我想这个是我个人需要关心的问题,我不是那种ctr ...
- .net调用存储过程详解(转载)
本文的数据库用的是sql server 连接字符串 string conn = ConfigurationManager.ConnectionStrings["NorthwindConnec ...
- GS(道具,帮会)定时存储
//最近数据库存储做了重大改变,数据库内部的回头再说,先看看GS这边的 .现在感觉数据库的状态将请求包放入命令队列中,以前是全部放进去,这样让其他的数据库操作不会随着数据库定时器而变慢,GS线程去驱动 ...