struts2——输入校验

本文介绍了Struts2框架中的输入校验机制,包括自动校验、全局与局部的自定义错误提示信息设置,以及如何编写校验逻辑。通过实例展示了如何实现不同类型的数据校验。
[color=red]struts2——输入校验[/color]
输入校验是是数据进入数据库的最后一道屏障,这就需要程序员对用户的输入进行必要的判断。虽说javascript也可以对输入的数据进行校验,可是只要用户屏蔽了javascript,客户端的输入校验就失去了功能,所以服务器的输入校检就成了最后的屏障。
1、struts2本身自带了输入校验,可以执行一下上次的程序,将年龄输入为abc,结果如下
(要在struts.xml文件中配置<result name="input">/input.jsp</result>)

可见,struts2可以对与类型不符合的数据情景自动校验。

2、(全局输入校验)通过国际化资源文件修改错误提示信息
虽说struts2可以对类型进行自动校验,可是它的提示不是很友好,比方说,[color=red]Invalid field value for field "startDate"[/color].所以我们应当自定义错误提示信息。
(1)、要在struts.xml文件中增加
[color=red]<constant name="struts.custom.i18n.resources" value="message"></constant>[/color]
这个标签的用处是将struts2内置的内容修改为自定义的内容,name属性是所要替换的内容,value属性是替换的内容
(2)、message文件的配置即为[color=red]message.properties[/color]
文件路径:该配置文件在src的根目录下,即为在WEB-INF的classes下面
[color=red]文件名称:message.properties[/color]
文件格式:[color=red]xwork.default.invalid.fieldvalue={0}自定义的内容[/color]([color=red]{0}[/color]表示发生类型转换错误的属性,但是它取得的是属性的名字,一般还是不太友好,比如说startDate,并不能表示出开始日期。[color=red]自定义的内容[/color]为显示的错误内容)
例: xwork.default.invalid.fieldvalue={0}input error
可以看出,错误提示已经变成我们所定义的。不过这是全局的输入校验。

3、局部的输入校验针对于某一个特定的action类,该文件的位置应当同校验的action类位于同一目录下

文件名:针对于特定的action类名.properties
例:我要针对于年龄和坐标做局部类型转化,[color=red]PointAction.properties[/color]
文件内容:[color=red]invalid.fieldvalue.age = age error1[/color]
invalid.fieldvalue.point = point error1


[color=red]局部校验优先于全局校验。[/color]

4、写一个程序来运用输入校验
(1)、写一个register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>注册</title>
</head>
<body>
<center>
<s:form action="register">
<s:textfield name="username" label="用户名"></s:textfield>
<s:password name="password" label="密码"></s:password>
<s:password name="repassword" label="重复密码"></s:password>
<s:textfield name="age" label="年龄"></s:textfield>
<s:textfield name="birthday" label="出生日期"></s:textfield>
<s:textfield name="graduation" label="毕业时间"></s:textfield>
<s:submit value="注册"></s:submit>
</s:form>
</center>
</body>
</html>
(2)、写一个RegisterAction

package com.song.action;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport {

private String username;
private String password;
private String repassword;
private int age;
private Date birthday;
private Date graduation;
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 getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Date getGraduation() {
return graduation;
}
public void setGraduation(Date graduation) {
this.graduation = graduation;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
@Override
public void validate() {
if(null==username||username.length()<=6||username.length()>=10)
{
this.addFieldError("username","用户名长度不符合");
}
if(null==password||password.length()<=6||password.length()>=10)
{
this.addFieldError("password","密码长度不符合");
}
if(!password.equals(repassword))
{
this.addFieldError("password","两次输入的密码不一致");
}
if(age<=0||age>=150)
{
this.addFieldError("age","年龄不合逻辑");
}
if(graduation.before(birthday))
{
this.addFieldError("birthday","请检查你的输入!");
}
}
}

validate()方法是用于校验的。不要忘记配置struts.xml文件的input返回值


[color=red]
遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面

类型转换与输入校验的流程

1. 首先Struts2对客户端传来的数据进行类型转换

2. 类型转换完毕后再进行输入校验

3. 如果类型转换和输入校验都没有错误发生,那么进入execute方法(调用商业逻辑)


注意:如果类型转换不成功,也同样要进行输入校验


[/color]
乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值