小可将给大家介绍Struts2框架内建的类型转换器,服务器端校验
一.Struts2内建类型转换器
1.基本类型转换器:
boolean和Boolean,char和Character,int和Integer,long和Integer,float和Float,double和Double
用来定义数据即可,Struts2自动校验,不再赘述
2.数组类型转换器
Struts2还提供多个表单元素name属性相同的处理办法,提交参数会转换成一个字符串数组
<s:textfield name="names" label="name1"></s:textfield>
<s:textfield name="names" label="name2"></s:textfield>
//在Action中用String数组取得
public String[ ] getNames(){
return names;
}
//输出:
<s:property value="names" />
3.集合类型转换器
集合同样可以返回数组值
//在Action中定义list
private ArrayList<String> names = new ArrayList<String>();
public ArrayList<String> getNames(){
return names;
}
二.服务器端校验
1.服务器端校验的重要性
注册界面可以添加客户端校验,但客户端校验就像一把锁,防君子而不能防小人。黑客可以轻易绕开前端校验直接攻击网站内部,所以服务器校验必不可少,它和前端校验形成网站构建时期的双保险
2.完成服务器端输入校验
//register.jsp
<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="birth" label="出生日期"></s:textfield>
<s:textfield name="email" label="邮箱"></s:textfield>
<s:submit value="注册"></s:submit>
</s:form>
/** RegisterAction.java */
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Pattern;
import com.opensymphony.xwork.ActionSupport;
public class RegisterAction extends ActionSuppot{
private String username;
private String password;
private String repassword;
private int age;
private Date birth;
private String email;
//省略get和set方法
public String execute() throws Exception{
return SUCCESS;
}
}
//RegisterAction-validation.xml
<validators>
//username校验
<validator type="requiredstring" short-circuit="true">
<param name="fieldName">username</param>
<param name="trim">true</param>
<message>必须输入用户名</message>
</validator>
//username长度在6到20之间
<validator type="regex" short-circuit="true">
<param name="fieldName">username</param>
<param name="expression"><![CDATA[(\w{6,20})]]></param>
<message>用户名长度必须在6到20之间</message>
</validator>
/**password输入*/
<validator type="requiredstring" short-circuit="true">
<param name="fieldName">password</param>
<param name="trim">true</param>
<message>必须输入密码</message>
</validator>
/**密码长度*/
<validator type="regex" short-circuit="true">
<param name="fieldName">password</param>
<param name="expression"><![CDATA[(\w{6,20})]]></param>
<message>密码长度必须在6到20位</message>
</validator>
/**repassword*/
<validator type="requiredstring" short-circuit="true">
<param name="fieldName">repassword</param>
<param name="trim">true</param>
<message>必须输入确认密码</message>
</validator>
/**密码长度*/
<validator type="regex" short-circuit="true">
<param name="fieldName">repassword</param>
<param name="expression"><![CDATA[(repassword==password)]]></param>
<message>密码和确认密码必须一致</message>
</validator>
/**age*/
<validator type="int">
<param name="fieldName">age<//param>
<param name="min">1</param>
<param name="max">120</param>
<message>年龄必须在${min}到${max}之间</message>
</validator>
/**birth*/
<validator type="date" >
<param name="fieldName">birth</param>
<param name="min">1900-01-01</param>
<param name="max">2015-01-01</param>
<message>出生日期在${min}到${max}之间</message>
</validator>
/**email*/
<validator type="email">
<param name="fieldName">email</param>
<message>请输入有效电子邮箱地址</message>
</validator>
</validators>
说明:
- required:必填校验器
- requiredstring:必填字符串校验器
- int:整数。。。
- double:双精度浮点数。。
- email:电子邮箱校验器
- url:网址校验器
- regex:正则表达式校验器
- short-circuit=”true”:校验短路,只要有一个出错,不再向下校验,给用户更好体验
- getTest(“username.rule”):添加国际化信息,并且防止和客户端国际化冲突,小可在此先不添加,有兴趣的小伙伴可百度自行添加
自定义校验器,可以在Web工程的WEB-LIB\lib目录下添加相应的xml文件
注意:如果使用自定义的xml配置文件,则系统默认的default.xml配置文件不会加载,所以需要将default.xml的内容复制到validators.xml配置文件中。否则不能使用系统内建的校验器。