校验浅谈
来源:互联网 发布:netbeans php教程 编辑:程序博客网 时间:2024/04/30 03:44
在Web应用程序中,为了防止客户端传过来的数据引发程序的异常,我们需要对用户输入的数据进行校验。对用户输入数据进行校验分为两个部分:一是校验输入数据的有效性;二是在用户输入了无效的数据后向用户提示错误消息。
Struts2输入校验是建立在类型转换的基础之上,即先进行类型转换,再进行输入校验。它同时支持服务器端校验与客户端校验。客户端校验一方面可以为服务器端过滤数据,另一方面可以减少网络流量,降低服务器端程序的运行负载。服务器端校验除了要重复客户端的校验,还可以包括数据逻辑的校验,例如注册用户名是否重复、验证码是否匹配等。
Struts2输入校验的实现方式:
Ⅰ、编写Java代码进行手动输入校验
Ⅱ、配置XML文件使用校验框架
Ⅲ、使用校验注解
第一种方式:编写Java代码进行手动输入校验。
当使用Struts2框架提供的校验机制时,自定义的Action需要继承com.opensymphony.xwork2.ActionSupport。
1、在Action的execute()方法中进行校验
.........//省略了部分代码
this.addFieldError(String fieldName, String errorMessage)
.........//省略了部分代码
if(this.hasFieldErrors()){
return INPUT;
}
.........//省略了部分代码
2、重写Action的validate()方法进行校验。
.........//省略了部分代码
this.addFieldError(String fieldName, String errorMessage)
.........//省略了部分代码
对校验提示消息国际化:
getText(资源文件中的key);
getText(资源文件中的key, 资源文件中value需要传递的参数值);
执行convertFromString方法。。。。。。。。
执行validate方法。。。。。。。。
执行execute方法。。。。。。。。
当执行完validate()方法后,如果校验通过就会调用execute()方法。此外用户可以自定义业务逻辑方法代替execute()方法。
3、使用自定义业务逻辑方法时,可以编写validateXxx()方法进行校验。
自定义业务逻辑方法时需要在struts.xml中配置action的method属性。例如action中自定义了myTest()方法,在struts.xml中配置如下:
<action name="register" class="com.struts2.action.RegisterAction" method="myTest">
当客户端向register.action发出请求之后,系统就会自动调用RegisterAction类的myTest()方法进行相应的业务逻辑处理。因此在一个action中可以处理多个业务逻辑。
当action中封装了不同的业务逻辑方法时,对不同的业务逻辑方法可以提供不同的校验规则,Struts2支持这种机制的实现。校验方法的命名规则:
校验方法以validate开头,加上对应业务逻辑方法的方法名,方法名的第一个字母大写。
例如:action中有一个业务逻辑方法是myTest(),则可以对应的提供一个validateMyTest()方法对其进行校验。
validateXxx()方法是由DefaultWorkFlowInterceptor拦截器(已包含在defaultStack拦截器栈中)调用的。
4、类型转换与输入校验的流程
执行convertValue()方法........类型转换
执行validateMyTest()方法......相应业务逻辑方法的校验
执行validate()方法............父类中的校验
执行myTest()方法..............执行业务逻辑方法
(1)、类型转换器负责对字符串的请求参数执行类型转换(type conversion),并将这些值设置成action的属性值;
(2)、在转换过程中若出现类型转换错误,则将错误消息保存到ActionContext中,conversionError拦截器将消息封装到fielderror中;
(3)、类型转换完成后再进行输入校验,输入校验时通过反射调用validateXxx()方法;
(4)、然后调用validate()方法;
(5)、如果校验未出现错误,则转入用户请求的处理方法(比如execute()方法、myTest()方法);如果出现错误,则转入input视图所指定的页面(所以,对于校验的方法必须要在配置文件中为其指定input result)。
【注意的几点】
a:如果类型转换错误,同样会进行输入校验。
b:遇到类型转换错误的时候(也就是说不能成功进行类型转换),Struts2框架会自动生成一条错误消息,并且将该错误消息放到fielderror中。
c:当把错误消息存放在fielderror中,如果使用的是HTML form,则需要在input视图所指定的页面中添加<s:fielderror/>标签;如果使用的是Struts2 form标签,并且form中的theme属性为xhtml(默认值),则无需添加<s:fielderror/>标签。当把错误消息存放在actionerror中时,不管使用的是何种form表单,都需要在input视图所指定的页面中添加<s:actionerror/>标签。
d:当action中提供了validate()方法时,不管有没有其它的校验方法,validate()方法都将会执行。
e:如果不需要每次都执行validate()方法,而又要保证execute()方法也有对应的校验方法,可以在action中删除validate()方法,提供validateExecute()方法。
5、actionerror、actionmessage和fielderror标签
actionerror:输出action级别的错误消息 <s:actionerror>
actionmessage:输出action级别的一般性消息 <s:actionmessage>
fielderror:输出action中全部字段或者指定字段的错误消息 <s:fielderror>
<s:fielderror fieldName="fieldName"/>
<s:fielderror><s:param value="'fieldName'"/></s:fielderror>
6、关于Struts2中form标签的theme(主题)属性:
(1)、form标签的theme属性用于设置Struts2中form的主题,默认为xhtml,还包括simple和ajax。
theme=xhtml时:默认会额外生成table、tr、td。
theme=simple时:会生成标签所对应的html标签形式。
在默认情况下,表单元素是分布在不同行的。如下代码:
<s:form action="login">
<s:textfield name="username" label="用户名"/>
<s:password name="password" label="密码"/>
<s:submit label="提交"/>
</s:form>
以上的代码跟HTML代码差不多,但是因为Struts2表单默认将表单内的每一个元素都分在单独的一行,label属性就如同我们HTML中在<input type="text"/>前面的文字标签一样。如果我们不想让它自动换行,那就应该写成如下格式:
<s:form action="login" theme="simple">
<s:textfield name="username" label="用户名"/>
<s:password name="password" label="密码"/>
<s:submit label="提交"/>
</s:form>
但在设置theme="simple"后,表单元素的label属性将失效,这时我们就需要在表单元素前面加入要显示的文字。如下代码:
<s:form action="login" theme="simple">
用户名:<s:textfield name="username" label="用户名"/><br/>
密码:<s:password name="password" label="密码"/><br/>
<s:submit label="提交" value="提交"/>
</s:form>
此时不会显示label属性的值,而是显示表单元素前面的文字。提交按钮如果没有指定value属性则显示它原来的默认值:Submit。
(2)、修改form标签theme属性值的两种方法:
在html页面中使用Struts2的UI(User Interface,用户界面)tag时一般可把theme设置为simple。如果在每个tag都如此设置比较麻烦,此时可以采用以下两种方法修改theme属性的默认值:
①:在struts.xml文件中修改struts.ui.theme的默认值:<constant name="struts.ui.theme" value="simple"/>
②:在类路径下面新建struts.properties,并添加如下内容:struts.ui.theme=simple
或者将struts-core*.jar文件中的template解压出来,然后把它放到项目的WEB-INF下,在struts.properties添加以下内容:
struts.ui.theme=simple
struts.ui.templateDir=WEB-INF/template
修改simple下的fielderror.ftl文件,将该文件中的<li>和</li>删除。
7、类型转换错误提示消息与表单输入校验提示消息同时出现的问题:
将Struts2中form标签的theme属性值设为simple,从actionerror中获取提示消息。
- 校验浅谈
- 浅谈Shiro框架中的加密算法,以及校验
- 浅谈Shiro框架中的加密算法,以及校验
- 浅谈在ASP.NET中数据有效性校验的方法
- 浅谈在ASP.NET中数据有效性校验的方法
- 浅谈在ASP.NET中数据有效性校验的方法!
- 浅谈在ASP.NET中数据有效性校验的方法
- 浅谈在ASP.NET中数据有效性校验的方法
- 浅谈在ASP.NET中数据有效性校验的方法
- 浅谈在ASP.NET中数据有效性校验的方法
- 浅谈在ASP.NET中数据有效性校验的方法
- 浅谈在ASP.NET中数据有效性校验的方法
- 浅谈在ASP.NET中数据有效性校验的方法
- 浅谈在ASP.NET中数据有效性校验的方法
- 浅谈在ASP.NET中数据有效性校验的方法
- 校验
- 校验
- 校验
- 位倒置计算
- android实现文字倒影
- 设置空间皮肤
- 安卓Android的系统架构详细解析
- 如何混淆Android项目代码(ProGuard),防止反编译
- 校验浅谈
- 使用VMware workstation 7.1,增加Red hat linux虚拟机磁盘空间
- Android SDK Manager 下载慢 自己下载
- c#与c++区别
- Qt控件的使用
- 消息响应COMMAND 和 UPDATE_COMMAND_UI的区别
- Updatedata的应用:
- 第二道笔试题
- 国际话浅谈