一个小型Struts系统开发过程中的笔记整理
2006-07-20 10:56
411 查看
之前在GL的督促下用Struts做了一个简单的HR系统。其间有过许多问题,现在归纳一下,希望对看到的人有所帮助。
笔者以前也用Struts开发过一个系统,那时候Struts的版本是1.1,现在1.2了,发现有一点区别。这次开发最开始的问题就是在这一点上。
首先有关于消息提示部分的内容。在Action中,saveErrors(String, ActionError)已经被废弃了,但是saveErrors(String, ActionMessage)还是可用的。而很多时候,为了区分错误消息和提示消息, 还可以用saveMessages(String, ActionMessage)处理相关内容。
同时我发现,无论用saveErrors还是savaMessages, <html:errors/>标签都是可用来提取消息的。不怕麻烦的话,用:
<html:messages id="msg" message="false">
<bean:write name="msg" />
</html:messages>
这样的方式,可以将错误(error) 消息和提示(message) 消息显式区分开来。当然了,我一向是怕麻烦的,所以直接用<html:errors>就可以了。不过心中有些疑惑,Struts提供<html:errors/>和<html:messages/>这两个标签,理论上应该是希望前者用来描述错误消息,后者用来描述提示消息吧?不知道是不是我用法上还有些问题?
另外,需要提醒的一点是,我用的是Struts 1.2.4,而现在最新的1.2.9似乎有一些莫名其妙的问题。建议现在应用的话,不要选择这个最新的版本。
第二个是Validator应用的问题。在Struts 1.2.9中(其实是从1.2.7开始), Validator-rules.xml文件的定义有了一些区别。主要是很多函数多了一个org.apache.commons.validator.Validator的参数,如果使用之前版本的Validator.xml文件,可能会报NoSuchMethodException——参数少了一个,方法自然就找不到了。。而在1.2.4的版本中,这个问题是没有的。
第三个是Tiles涉及的问题。受Html中Frame的影响,我本来想找到一种可以实现Tiles中某个页面部分刷新的方法。(比如在有左右两部分的页面,单击左链接,刷新右侧页面)而事实证明,这是不可能的。我猜测的原因是Tiles的整体页面已经在Server端编译成servlet,而Html是无需编译的脚本。不得已,只有采用正页面刷新的方式。(不知道有没有别的方法?知道的请指教)
第四是单表单多按钮时(LookupDispatchAction),利用Validator验证,需要单独写ValidatorForm的validate函数,因为也许不同的按钮需要的表单验证是不一样的。这里提供一份代码样本:
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
String parameter = mapping.getParameter();
if( parameter != null ) {
// Identify the method name to be dispatched to.
String name = request.getParameter(parameter);
MessageResources resources =
(MessageResources) request.getAttribute(Globals.MESSAGES_KEY);
// Identify the localized message for the cancel button
String message = resources.getMessage("empmng.modify.deletebutton");
// if message resource matches the cancel button then no
// need to validate
if( name != null && name.equals(message) ) {
return null;
}
}
// perform regular validation
return super.validate(mapping, request);
}
暂时先写这些吧,还有收录的几个小技巧,我会写在另一片文章里
笔者以前也用Struts开发过一个系统,那时候Struts的版本是1.1,现在1.2了,发现有一点区别。这次开发最开始的问题就是在这一点上。
首先有关于消息提示部分的内容。在Action中,saveErrors(String, ActionError)已经被废弃了,但是saveErrors(String, ActionMessage)还是可用的。而很多时候,为了区分错误消息和提示消息, 还可以用saveMessages(String, ActionMessage)处理相关内容。
同时我发现,无论用saveErrors还是savaMessages, <html:errors/>标签都是可用来提取消息的。不怕麻烦的话,用:
<html:messages id="msg" message="false">
<bean:write name="msg" />
</html:messages>
这样的方式,可以将错误(error) 消息和提示(message) 消息显式区分开来。当然了,我一向是怕麻烦的,所以直接用<html:errors>就可以了。不过心中有些疑惑,Struts提供<html:errors/>和<html:messages/>这两个标签,理论上应该是希望前者用来描述错误消息,后者用来描述提示消息吧?不知道是不是我用法上还有些问题?
另外,需要提醒的一点是,我用的是Struts 1.2.4,而现在最新的1.2.9似乎有一些莫名其妙的问题。建议现在应用的话,不要选择这个最新的版本。
第二个是Validator应用的问题。在Struts 1.2.9中(其实是从1.2.7开始), Validator-rules.xml文件的定义有了一些区别。主要是很多函数多了一个org.apache.commons.validator.Validator的参数,如果使用之前版本的Validator.xml文件,可能会报NoSuchMethodException——参数少了一个,方法自然就找不到了。。而在1.2.4的版本中,这个问题是没有的。
第三个是Tiles涉及的问题。受Html中Frame的影响,我本来想找到一种可以实现Tiles中某个页面部分刷新的方法。(比如在有左右两部分的页面,单击左链接,刷新右侧页面)而事实证明,这是不可能的。我猜测的原因是Tiles的整体页面已经在Server端编译成servlet,而Html是无需编译的脚本。不得已,只有采用正页面刷新的方式。(不知道有没有别的方法?知道的请指教)
第四是单表单多按钮时(LookupDispatchAction),利用Validator验证,需要单独写ValidatorForm的validate函数,因为也许不同的按钮需要的表单验证是不一样的。这里提供一份代码样本:
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
String parameter = mapping.getParameter();
if( parameter != null ) {
// Identify the method name to be dispatched to.
String name = request.getParameter(parameter);
MessageResources resources =
(MessageResources) request.getAttribute(Globals.MESSAGES_KEY);
// Identify the localized message for the cancel button
String message = resources.getMessage("empmng.modify.deletebutton");
// if message resource matches the cancel button then no
// need to validate
if( name != null && name.equals(message) ) {
return null;
}
}
// perform regular validation
return super.validate(mapping, request);
}
暂时先写这些吧,还有收录的几个小技巧,我会写在另一片文章里
相关文章推荐
- 一个小型Struts系统开发过程中的小技巧
- iOS开发笔记之三十一——日历NSCaledar使用过程中遇到的一个苹果系统bug
- 一个简单电商网站开发过程中的业务资料整理
- 笔记----如何自制一个小型的linux系统
- 最近准备整理一下手头资料,开发一个工作流和表单管理系统
- 在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。文章通过一个具体的例子说明了这些嵌入式交叉编译开发工具的制作过程。 随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来
- 一个小型的新闻发布系统的制作过程及源代
- 嵌入式开发-一个小型的嵌入式系统msOS
- 一个简单电商网站开发过程中的业务资料整理
- (学习笔记)安卓开发过程中需要的权限整理(不定期更新)
- 嵌入式开发笔记(二)嵌入式系统启动过程 (S5pv210)
- 综合图形学算法及OpenGL技术开发一个小型图形软件系统
- 配置一个完整的android开发系统环境过程
- 如何开发一个具有个人特色的小型理财系统呢
- Struts 1 学习笔记-5-2(编写一个简单的支持I18N的登录系统)
- Android开发过程遇到异常含义及解决方法整理
- Android开发过程中的报错整理
- Ubuntu系统搭建以太坊开发平台过程
- 张高兴的 UWP 开发笔记:用 Thumb 控件仿制一个可拖动 Button
- 最近要读NET Distributed Applications这本书,并做学习笔记.系统地学习一遍分布式应用程序开发和设计