一、数据类型转换
1、struts内部自动将页面获取到的字符串类型的数据转为数据库中的类型的 insert,update,delete
public class MyConverter extends StrutsTypeConverter{
private SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
public Object convertFromString(Map arg0,String[] arg1, Class arg2){
//判断有没有被转换的数据
if(arg1==null||arg1.length==0)
return null;
//得到被转换的数据
String data = arg1[0];
if(arg2==java.util.Date.class){
try{
return sdf.parse(date);
}catch(ParseException e){
e.prinStackTrace();
return null;
}
}
return null;
}
2、把数据库中某种类型的数据转成字符串显示在页面上 select查询
struts2实现的自动转换:
1:基本数据类型的转换
2:本地各式的日期类型(yyyy-MM-dd)———Date
3:把值是String[]类型的转换成了用“,+空格" 间隔的字符串
二、自定义类型转换器:
TypeConverter 的子类DefaultTypeConverter的子类 StrutsTypeConvrter
定义好的类型转换器需要注册:
a:该类型转换期只能被特定的类使用(局部的)
b:该类型转换器可以被全局使用(全局的)
1、把页面上的MM/dd/yyyy格式的日期转成Date类型
//第一个参数是OGNL上下文,第二个参数是被转换的数据,第三个参数是转成的类型
public class MyConverter extends StrutsTypeConverter{
private SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
public Object convertFromString(Map arg0,String[] arg1, Class arg2){
//判断有没有被转换的数据
if(arg1==null||arg1.length==0)
return null;
//得到被转换的数据
String data = arg1[0];
if(arg2==java.util.Date.class){
try{
return sdf.parse(date);
}catch(ParseException e){
e.prinStackTrace();
return null;
}
}
return null;
}
2、把Date类型的日期转成字符串
c、定义好的类型转换器需要注册
1、局部的类型转换器,文件名的命名规则:JavaBean的名称-conversion.properties
birthday=com.lzh.web.converter,MyConverter //键是字段名,值是类型转换器的类路径
2、定义全局的类型转换期,文件的命名规则是xwork-conversion.propertioe
java.util.Date=com.lzh.web.converter.MyConverter(转换器包名+转换器类名)
三、没有自定义类型转换器时的错误处理
1、定义结果视图 input
<result name="input">/regist.jsp</result> 数据回显
问题是回来了,但是没有显示数据
<%@ taglib uri="/struts-tags" prefix="s"%> struts的标签库
<s:filederror/>——只是显示错误信息,实现数据的回显,必须使用struts2的表单
struts2 的form和html的表单差不多
action:可以直接写动作
method:默认是post
enctype:表单编码的MIME类型
发生类型转换错误时为什么加入input结果视图就能实现数据回显?
拦截器conversionError实现的这个功能
注意:动作类必须继承ActionSupport
<s:form action = "regist.action">
<s:textfield name="username" label="用户名"></s:textfield>
<s:password name="password" label="密码" showPassword="true"></s:password>
<s:textfield name="birthday" label="出生日期"></s:textfield>
<s:submit value="注册"></s:submit>
</s:form>
User.properties
invalid.field
四、数据验证
客户端验证,服务器端验证
服务器端验证:
1、编程式验证:写代码验证:写死了,硬编码
2、声名式验证:写xml代码验证
<validators>
<!-- 基于字段的验证 -->
<field name="username">
<!-- 怎么验证,struts内部定义了很多的验证器
requiredstring判断是否为null,或空字符串,去空格 -->
<field-validator type="requiredstring">
<message>用户名不能为空</message>
</field-validator>
</field>
</validators>
基于验证器的验证:
<validators>
<!-- 基于验证器的验证 -->
<!-- 怎么验证,struts内部定义了很多的验证器-->
<validator type="requiredstring">
<!-- 使用注入的方式指明验证谁
private String actionName
setActionName()-->
<param name ="fieldName">password</param>
<message>用户名不能为空</message>
</validator>
</field>
</validators>
小知识 1、选择框 <s:radio list="{‘男’,‘女’}">