经过前面两天的BBS学习,相信大家眼里都出现了一个清晰的MVC模式架构。接下来的3天,我们将在汤老师的带领下对一些技术细节做探讨,并复习前面Struts和Hibernate的知识,一起完成ITCASTBBS的版面分类模块和用户注册模块,精彩正在进行中······
1. 表单的服务器端和客户端验证
(1)服务器端验证
分析:CategoryAction继承了DispatchAction,CategoryAction中的Action有的需要验证表单,有的则不需要验证表单,所以应当在配置文件中将validate属性设为false,自定义方法对CategoryAction中需要进行表单验证的Action进行验证。
1) 在ActionForm中重写validate()方法
2) 在BaseAction中自定义方法validateFailed()对需要验证表单的Action进行验证,返回Boolean值
3) 在CategoryAction中根据Boolean取值选择不同的返回页面
(2)客户端验证
这里使用js和正则表达式进行简单验证,不需要进行服务器端的校验。
2. 分类移动的思路
1) 每个分类有不同的order的值
2) 添加时要指定order值,order值不能重复,order值要最大
3) 显示时按order的值升序排列:在CategoryDaoImpl中重写findAll()方法
4) 上移:跟上面的分类的order交换值;下移:跟下面的分类的order交换值
5) 上移操作的HQL语句:
session.createQuery(
"from Category c where c.order < ? order by c.order desc")
.setParameter(0,category.getOrder())
.setFirstResult(0)
.setMaxResults(1)
.uniqueResult();
3. 版面管理
版面管理和分类管理类似,实现流程也类似,可以参考分类管理进行。这里我主要就一些不同于分类管理的细节进行总结归纳。
1) 显示层使用Struts标签编写下拉列表框的代码:
<html:select property="categoryId" styleClass="inw_widen1">
<html:optionsCollection name="categories" value="id" label="name"/>
</html:select>
2) 验证表单时,如果验证失败,此时返回的页面应当是addUI,而不能是add,因为addUI可以为add页面准备数据.
3) 版面移动的时候,由于保存Forum对象的Set是无序的,无法保证版面在显示层出现的顺序,这里需要使用LinkedHashSet
4) 页面中有大量重复的代码,可以把重复代码抽取出来成一个单独的页面(jspf),使用静态包含(include)导入
好了,版面完成了。明天开始继续用户模块的编写,大家敬请关注!