今天内容密度相当大,而且还有点细,知识点比较多。今天是冯老师的最后一天课程,与老冯的将近一个月的接触,老冯讲课有特点:幽默,上课时时不时幽一下,很提神的;声音比较大,以至于老冯有句极像口头禅的“小点声,不然隔壁又找来了”;最重要的是上课的代码每天都有超强的注释,比较有特点的是超强的 readme.txt ,深的同学喜爱;讲课特别敬业,这儿的老师都是特别敬业的。听说老冯呕心沥血,自己做了个项目,年后会公布在网上,到时真的研究研究,相当期待。老师最后给我们了个邮箱,以后有问题,仍然可询问下。
把今天讲的内容总结下,今天讲了昨天留的作业(Struts做的客户信息系统),Struts1.x的验证机制,表单重复提交,同步令牌机制,上传的实现,转换器,国际化内容,由于内容多,只记不会的
1.处理表单重复提交
解决方法:
1. 生成一个唯一的编号,该编号在添加信息的页面存放在隐藏域中
该代码执行后自动添加在customer.jsp页面中添加如下信息 session中保存一份
代码如下:注意:在execute方法中{
//在Action的execute方法开始加上
this.saveToken(request);
…
//在调用service层增删改查前加从request中获取隐藏域的值
// Stirng
gxxxValue=request.getParameter("org.apache.struts.taglib.html.TOKEN");
// 在从session中取出 String
keyValue=session.getAttribute("key");
// 如果两个值相等 gxxxValue=keyValue,数据提交
boolean
flag=this.isTokenValid(request);
if(flag){
//应该从session中清除session.removeAttribute(key)
this.resetToken(request);
/
/插入数据库的方法以下面一句为例
customerService.saveCustomer(c);
}else{
System.out.println("表单重复提交了");
}
注意:原理:
* 从request中获取隐藏域的值
Stirng
gxxxValue=request.getParameter("org.apache.struts.taglib.html.TOKEN");
* 在从session中取出 String
keyValue=session.getAttribute("key");
* 如果两个值相等 gxxxValue=keyValue,数据提交
当数据提交后要从sessioon中删除key
sessioon.removeAttribute("key")
2.转换器:
当我们在开发时,会遇到数据库中的数据类型和ActionForm中的类型不一致的情况,为减少转换的麻烦,Struts给我们了转换器,她能自动转化很多类型,但遇到如果遇到Date类型就不能转换
这时要定义转换器
如何定义一个转化器:
1.定义一个类 String2DateConvert implements Converter
重写接口中的方法
2.注册转化器(一定在使用前注册) 在struts中常用的转换器Struts自己给注册了
实际是把信息放置到一个Map中,原理:
* key是转化数据类型的名称
* 转化器的对象
converters.put(clazz,
converter);
converters.put(java.util.Date, new
String2Dateconverter());
下面是代码:在Action类中(注意不是在方法体中),加:
static{
/**
* register(new String2DateConvert(),
java.util.Date.class);
* 第一个参数是转化器的实例
* 第二个参数要转化的数据类型(本类中用的String-java.util.Date)
*/
ConvertUtils.register(new
String2DateConvert(), java.util.Date.class);
}
剩下的就是用Struts自己的,代码:
BeanUtils.copyProperties(与数据库交道的form, 与页面交道的form);
最后
建议:开发中ActionForm中的所有属性定义为String, 不管什么样的数值我都接收,接收到之后在进行检验
3.国际化:
struts中的国际化:
* 定义资源文件
命名规则基名_语言_国家.properties
定义支持中文和英文的资源包
* resource.properties(默认)
*
resource_zh_CN.properties
*
resource_en_US.properties
把资源包放置到当前web应用的src下,经构建后保存到/WEB-INF/classes目留下
中文要进行编码转化
native2ascii -encoding gb2312源文件目标文件.properites
* 在struts中如何使用
* 在struts-config.xml文件中引入 parameter="resource"的值基名
<message-resources
parameter="resource"></message-resources>
* 在jsp页面中如何使用
引入bean标签库
<%@ taglib uri=http://struts.apache.org/tags-bean prefix="bean"%>
<bean:message key="username"/>
key 是资源文件中=前面的值
* 如有多个资源文件
* 在struts-config.xml文件中引入 parameter="resource"的值基名
增加属性key 加以区分
<message-resources
parameter="resource1"
key="backup"></message-resources>
*在jsp页面中如何使用
<bean:message key="username"
bundle="backup"/>
今天就至此了,明天是佟刚老师讲AJAX ,每天都有收获,是我最开心的事情,
好好休息,静待明天的来到!