对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. C#中ref参数及out参数对比

    ref 关键字和out关键字均会导致参数通过引用来传递(相同点1).这是两者的共同点. 通过引用传递参数,会使方法中对参数所做的任何修改都将反映在该变量中. 两者还有一个共同点,那就是:若要使用 re ...

  2. hdu 2546 饭卡 01背包

    先将前n-1个从小到大排序.对m-5进行01背包.然后答案就是m-dp[m-5]-a[n-1] 至于为什么最后减去最贵的菜品,而不是把最贵的菜品也放到01背包里呢, 由于假设能够把最贵菜品a[n-1] ...

  3. TPersistent的三个用途(读写DFM文件,Assign,RTTI),最主要还是第三个用途

    不是什么类对象都需要RTTI,如果把它放在TObject,除了增加可执行文件的大小以及运行内存空间以外,没什么好处.

  4. ASP漏洞+SQL注入的入侵方法

    本文就是想对装上了防火墙的主机,进行入侵攻击的大概思路小结一下. 首先当然是用扫描器对这台服务器(以下简称主机A)进行常规的扫描,得到初步的信息.再用nmap -sS IP -P0 -p 139 ,透 ...

  5. boost::property_tree读取解析ini文件--推荐

    boost::property_tree读取解析ini文件 #include "stdafx.h" #include <iostream> #include <b ...

  6. 关于 iOS 基础动画

    1,首先,在iOS中,动画有2种,一种是对 UIView 做动画处理,另一种是对 CALayer做动画. 这里我们先要搞清楚 UIView 与 CALayer 之间的关系,UIView 是界面的基础元 ...

  7. NSUserDefaults设置bool值重新启动后bool仅仅设置丢失问题

    今天使用NSUserDefaults保存bool至重新启动后发现bool值没有保存对 NSUserDefaults *ud = [NSUserDefaults standardUserDefaults ...

  8. nest expression &amp; Pyparsing

    http://pyparsing.wikispaces.com/ http://bbs.csdn.net/topics/330052586 C++ boost "<([^<> ...

  9. HDU3572_Task Schedule(网络流最大流)

    解题报告 题意: 工厂有m台机器,须要做n个任务.对于一个任务i.你须要花费一个机器Pi天,并且,開始做这个任务的时间要>=Si,完毕这个任务的时间<=Ei. 对于一个任务,仅仅能由一个机 ...

  10. Qt之开机自启动

    Windows开机自启动的程序很多,包括系统软件.杀毒软件.一些其他安装软件等等.当然可以禁止,通过软件管理或者手动删除对应的注册表中的项即可!但是为了系统的服务或者操作上的方便,我们往往需要开机自启 ...