`
dr2tr
  • 浏览: 138721 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一个小型Struts系统开发过程中的笔记整理

阅读更多

之前在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"><o:p></o:p>

               <bean:write name="msg" /><o:p></o:p>

          </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);

}

暂时先写这些吧,还有收录的几个小技巧,我会写在另一片文章里

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics