对action方法进行校验有两种方法一种是:

1手工编码书写

2一种是用xml

输入校验的流程:

1类型转化器对请求参数执行类型转化,并把转换后的值赋给action属性。

2.如果执行类型转化的过程中出现异常,系统会把异常信息保存到actioncontext,conversionerror拦截器会将信息添加到fileerroes里。不管类型转化是否出现异常,都会进入第3步骤。

3系统通过反射技术先调用action的validateXxx()方法,Xxx是特定的方法名字。

4.z再调用action,如果有错误信息就会将错误信息返回到input视图上面。

下面来写一个实例用手工编码的方法:

写有一个from表单的index.JSP在head加上

<%@taglib  uri="/struts-tags"  prefix="fish"%>//通过引入struts标签库

在body写

<fish:fielderror></fish:fielderror>//会显错误信息用的

<form action="/struts2test8/test/redfishmyMehod2.action" method="get">

<a>用户名:</a><input type="text" name="username"><br><a>手机号:</a><input

type="text" name="phone"><br><input type="submit"

value="提交">

</form>

接着我们写struts.Xml

<package name="fish" namespace="/test" extends="struts-default" >

<action name="redfish*" class="com.fish.Test" method="{1}">

<result name="success">/ok.jsp</result>

<result name="input">/index.jsp</result>//如果有错误信息将会送给inout的视图。那么就不在执行success的视图。

</action>

</package>

接着写一个关于写一个类型转化器来验证。

package com.fish;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

publicclass Test  extends ActionSupport{//首先得继承这个类

String username;//这个属性和jsp、里面的name是一样的,

String phone;

public String getUsername() {

returnusername;

}

publicvoid setUsername(String username) {

this.username = username;

}

public String getPhone() {

returnphone;

}

publicvoid setPhone(String phone) {

this.phone = phone;

}

public String myMehod1(){

ActionContext.getContext().put("message", "保存成功!");

return"success";

}

public String myMehod2(){

ActionContext.getContext().put("message", "更新成功!");

return"success";

}

@Override

publicvoid validate() {//要想验证必需重写这个方法。但是这样是可以验证myMehod1和myMehod2的方法。也就是对action的所有方法进行校验,所以要想对特定方法进行校验的时候我们只要遵循一个格式. validateXxx()方法这样我们就可以将只验证特定方法,比如我只想验证myMehod2方法,我们就可以这么写validateMyMehod2()格式是固定的。

if(username==null||"".equals(username.trim())){

addFieldError("username", "用户名不能为空");

}

if(phone==null||"".equals(phone.trim())){

addFieldError("phone", "手机号不能为空");

}else{

if(!Pattern.compile("^1[358]\\d{9}$").matcher(phone).matches()){

addFieldError("phone", "手机格式不正确");

}

}

super.validate();

}

}

利用手工编码的方式对srtus2进行输入验证的更多相关文章

  1. Base64的编码转换方式

    下面,详细介绍Base64的编码转换方式. 所谓Base64,就是说选出64个字符----小写字母a-z.大写字母A-Z.数字0-9.符号"+"."/"(再加上 ...

  2. 详细介绍Base64的编码转换方式

    下面,详细介绍Base64的编码转换方式. 所谓Base64,就是说选出64个字符----小写字母a-z.大写字母A-Z.数字0-9.符号"+"."/"(再加上 ...

  3. Auto Layout简单应用——以编码的方式实现Auto Layout自动布局(二)

    在上一篇文章iOS学习笔记02——以编码的方式实现Auto Layout自动布局(一)中我们简单的介绍了使用Visual Format Language创建布局约束来实现自动布局,这种方法创建的布局约 ...

  4. 【Python】利用递归函数调用方式,将所输入的字符串,以相反的顺序显示出来

    源代码: """ 利用递归函数调用方式,将所输入的字符串,以相反的顺序显示出来 string_reverse_output():反向输出字符串的自定义函数 pending ...

  5. python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie)

    python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie) 主要包括两部分内容:(1)利用python中的dict实现Trie:(2) ...

  6. Django 类方式view进行进行用户验证

    问题: Django中,view的书写方式有两种,一种是def函数方式,一种是class方式,函数方式通过@login_required装饰器标记函数,就必须通过用户验证,而类,则没办法通过此方法进行 ...

  7. angularjs通过ng-change和watch两种方式实现对表单输入改变的监控

    angularjs通过ng-change和watch两种方式实现对表单输入改变的监控 直接上练习代码 <!DOCTYPE html> <html xmlns="http:/ ...

  8. (Demo分享)利用JavaScript(JS)做一个可输入分钟的倒计时钟功能

    利用JavaScript(JS)实现一个可输入分钟的倒计时钟功能本文章为 Tz张无忌 原创文章,转载请注明来源,谢谢合作! 网络各种利用JavaScript做倒计时的Demo对新手很不友好,这里我亲手 ...

  9. 利用ADSL拨号上网方式如何搭建服务器

    序:搭建服务器需要两个条件硬件服务器和固定公网IP,随便一台个人电脑都可以作为硬件服务器,就剩下一个问题,如何获得一个固定公网IP. 第一章 扫盲:ADSL拨号上网方式,本地IP与公网IP的区别 一. ...

随机推荐

  1. ios上禁止输入表情

    ios上禁止输入表情 + (BOOL)isContainsEmoji:(NSString *)string { __block BOOL isEomji = NO; [string enumerate ...

  2. 管理启示,不起毛的鹦鹉——leo锦书54

    下面一个很长的故事后,我真的很期待明确:    一个人去买鹦鹉,看到一仅仅鹦鹉前标:此鹦鹉会两国语言,售价二百元.还有一仅仅鹦鹉前则标道:此鹦鹉会四门语言.售价四百元.该买那仅仅呢?两仅仅都毛色鲜亮, ...

  3. Git现实(四)状态转换

    前Git实战(三)环境搭建博文.我们大致解说了一下git的环境安装.今天我们解说一下Git的状态转换. 学习版本号控制工具.对工具进行版本号控制之间的状态转换很重要. 毕竟Git仅仅是一个工具,假设不 ...

  4. const对象默认是static的,而不是extern的

    const 和 static 变量,可以放在头文件中 const对象默认是static的,而不是extern的,所以即使放在头文件中声明和定义.多个cpp引用同一个头文件,互相也没有感知,所以不会导致 ...

  5. 流行python服务器框架

    流行python服务器框架   1.tonardo---- 多并发.轻量级应用, “非阻塞”的web 容器.类似tomcat.这个大家太熟悉了,就不多说了. 2.Twisted---- Twisted ...

  6. CF 319D(Have You Ever Heard About the Word?-模拟)

    D. Have You Ever Heard About the Word? time limit per test 6 seconds memory limit per test 256 megab ...

  7. LA 3942 Remember the Word(前缀树&树上DP)

    3942 - Remember the Word Neal is very curious about combinatorial problems, and now here comes a pro ...

  8. 性能测试之LoardRunner 手动关联二

    概述: 1.如果寻找左右边界值 2.关联函数详解 以下是详细介绍 1.如果寻找左右边界值 <以login 为例> Step1.录制两份相同的业务流程的的脚本,输入的数据要相同 Step2. ...

  9. Swift - 给游戏添加背景音乐和音效(SpriteKit游戏开发)

    游戏少不了背景音乐和音效.下面我们通过创建一个管理音效的类,来实现背景音乐的播放,同时点击屏幕可以播放相应的音效. 声音管理类 SoundManager.swift 1 2 3 4 5 6 7 8 9 ...

  10. Eclipse中提高Android SDK Manager下载速度方法

    在Windows-System32-drivers-ect目录下找到hosts文件 打开hosts文件(用记事本打开就可以),在文件以下填上一下内容: 203.208.46.146 www.googl ...