传智播客——OA项目实战(二)

来源:互联网 发布:通达信 沪深日线数据 编辑:程序博客网 时间:2024/04/28 11:11

阳光老师基本上都是先讲怎么写,让后让我们自己写,这样的方式对于项目来说确实是极大的锻炼了我们的动手能力,听说过几天有个CRM的项目是说半天写半天,更爽了。
今天一天就讲了DocTemplateAction中几个方法,虽然的慢点,但基本上所有的同学都能跟上,
一 页面的列表 列表 
 list()
List<DocTemplate> docTemplateList = docTemplateService.findAll();
//给文档管理模块的列表页面准备数据,doctemplate的实体存在数据库中,//doctemplateservice的findall方法其实是调用DaoImplBase中fingdall方法,查找所有的实体//session.createquery("from"+clazz.getSimpleName()).list();
request.setAttribute("docTemplateList", docTemplateList);
讲包含所有文档的list集合放到request作用域中,以便在jsp页面中用<c:foreach>标签来显示文档的各种属性
return mapping.findForward("list");
二 上传页面 
 uploadUI(){
return mapping.findForward("uploadUI");
}
上传页面比较简单,因为不涉及实体数据,所有这里不用写任何代码。
三 上传 
 upload{
{
// 从actionForm --> 到docTemplate
DocTemplateActionForm actionForm = (DocTemplateActionForm) form;
// 处理文件与扩展名,
为什么要处理文件和扩展名呢,因为从页面上传来的只有文档本身和文档在上传电脑上的全路径,并没有参数用来传输文件名好扩展名,如果多搞几个文本域用来让用户输入需要的信息不就好了吗?其实这完全是一种菜鸟程序员的脑残行为,这回让用户觉得很繁琐,而且文件名和文件扩展名本身就已经包含在全路径中了,完全可以取到。
String fileName = actionForm.getResource().getFileName();
String name = FilenameUtils.getBaseName(fileName);
String extension = FilenameUtils.getExtension(fileName);
// 处理重命名
这只是个小的逻辑判断,不过这里的StringUtils这个工具还是很有用的。
if (StringUtils.isNotBlank(actionForm.getRenameTo())) {
name = actionForm.getRenameTo();
}
// 保存上传的文件到 应用程序/attachments/ 文件夹中
String basePath =this.getServlet().getServletContext().getRealPath("/attachments");
basePath最终是tomcat服务器 webapp下工程下面的目录里,
InputStream in = actionForm.getResource().getInputStream();
String path = AttchmentUtils.saveAttachment(basePath, in);
// service.save( docTemplate);
DocTemplate docTemplate = new DocTemplate();
docTemplate.setName(name);
docTemplate.setExtension(extension);
docTemplate.setDescription(actionForm.getDescription());
docTemplate.setPath(path);
docTemplateService.save(docTemplate);
// return
return mapping.findForward("toList");
}
三 修改页面 
修改页面的数据准备是这样的,struts的回显功能无比强大,好像struts也就这么点省事,根据对应的ID通过hibernate在数据库中找到相应的实体,然后把实体的某些用于回显的数据拷贝给fombean,struts就可以自动回显了,
editUI{
DocTemplateActionForm actionForm = (DocTemplateActionForm) form;
获得actionform
DocTemplate docTemplate = docTemplateService.getById(actionForm.getId());
获得相应的实体
actionForm.setName(docTemplate.getName());
actionForm.setDescription(docTemplate.getDescription());
拷贝数据
return mapping.findForward("editUI");
}
四 修改 
修改于修改页面是不同的,基本上可以说是相反的。
struts从页面中获得数据封装进formbean,然后把formbean中的数据拷贝进实体,再经由hibernate存进数据库。
 edit(
// actionForm --> docTemplate
DocTemplateActionForm actionForm = (DocTemplateActionForm) form;
DocTemplate docTemplate = docTemplateService.getById(actionForm.getId());
// 处理重命名
if (StringUtils.isNotBlank(actionForm.getRenameTo())) {
docTemplate.setName(actionForm.getRenameTo());
}
docTemplate.setDescription(actionForm.getDescription());
// service.update( docTemplate )
docTemplateService.update(docTemplate);
return mapping.findForward("toList");
}
五 删除 
文档的删除不同于其他的实体删除,因为文档还存在了本地硬盘上,删除实体的同时也要删除文档,但为了简便,看起来在这里就是根据id删除了实体,其实在service层中同时删除了文档
delete
throws Exception {
// 还要删除文件
Long id = Long.parseLong(request.getParameter("id"));
docTemplateService.delete(id);
return mapping.findForward("toList"); // list.jsp
}
六 下载 
 download
 {
Long id = Long.parseLong(request.getParameter("id"));
DocTemplate docTemplate = docTemplateService.getById(id);
通过id获取实体
// 全文件名,要进行编码
String filename = docTemplate.getName() + "." + docTemplate.getExtension();
filename = URLEncoder.encode(filename, "utf-8");
文件名并不是直接拼成就能用,必须经过编码。
// 设置相应的头信息
response.setContentType("application/octet-stream ");
response.addHeader("Content-Disposition", "attachment; filename=" + filename);
头信息 基本固定。
// 向客户端写文件内容
OutputStream out = response.getOutputStream();
FileInputStream in = new FileInputStream(docTemplate.getPath());
try {
IOUtils.copy(in, out);
} catch (Exception e) {
// 在客户端取消下载时,会抛此异常
System.out.println("--->" + e.getClass());
} finally {
IOUtils.closeQuietly(in);
}
return null;
}
}
学习总结:总算比较清楚的了解了FormBean以及与实体的关系,struts在我看来就一个formbean的回显和一个中央servlet的流程控制。

原创粉丝点击