jsf+hibernate开发小项目杂谈(一)

 前言
    关键字:框架 模式 DAO ORM CRUD

    应监管部门要求,公司需要开发一个小型的MIS管理系统,要求能录入基本信息并维护浏览,并且基于录入的信息生成xml文档并打包成zip文件,供点击下载最后提交给监管部门。人手有限,数据库设计部分由同事完成,界面开发部分由本人完成。
    对于这样一个迷你型项目,只有2个人参与,就无从谈起规范的软件开发流程(需求、分析、设计、编码、测试、发布等)了。同事根据需求完成了底层数据库表设计,余下工作留给了我。现在J2EE开发方面各种框架、模式、工具名目繁多,真的是让人有点无所适从。如果不严格地按多层开发划分,那么在表现层有structs/jsf/webwork/tapestry...,在业务逻辑层有Spring...,在数据访问层有各种DAO访问模式以及ORM映射工具Hibernate/IBatis...,如果再算上apache或sorceforge等开源组织提供的解决方案,真可谓琳琅满目、无从下手。
看似struts + spring + hibernate的组合蛮流行,但也不敢妄加断定,各种组合之间应该是各有千秋、平分秋色。针对本微型项目的特点,我选择的工具要求:扩展性好、代码量小、便于维护、配置移植方便。回归最原始的纯jdbc + jsp的组合方式是不可能的,所以最终选择了jsf + hibernate的组合方式。个人不太喜欢struts的Action/ActionForm,所以选择了jsf;另外本项目没有太多的业务逻辑控制,所以没有采用spring;hibernate/ibatis两个都能胜任,前者纯面向对象的全自动化映射方式,个人认为ibatis的半自动映射确实灵活,但可能代码量会大一些,于是就选择了hibernate。
    开发前,参考了JCatalog项目,引用并借鉴了其部分功能模块的设计或者是代码。开始正文之前,再废话几句。本文记载了一些项目开发过程中遇到的一些问题,并提供个人的解决办法。对关键的几个地方予以阐述,不求面面俱到(系统性连贯性可能不太好),希望能给读者带来一定的参考意义。其次,对IT开发人员来说,适当的技术总结也是有必要的。另外,现在专著于oracle方面应用开发,开发一个J2EE项目的机会不是很多,权当作一次记忆与回顾。再则,个人blog很久没有更新了。基于这些考虑,决定写点东西。

一、全局错误处理与消息显示
    1. 关于全局错误处理读者可参考[1]。为了界面友好性,出错时应该有温馨提示(或跳转到错误提示页面)。如果不处理,则可能直接蹦出代码异常界面(即java函数调用栈),这是不可取的,这时全局错误处理是一种办法。它捕获一切运行期异常(通常在业务层会被封装成一个BaseException),再进行相应的处理。对于myfaces下的jsf,会在managed bean中抛出一个ActionListenerImpl异常(实现ActionListener接口)。[1]中提供的办法为:
    - 在faces-config-application.xml中配置一个监听器:
    <application>
        <action-listener>
            yourpackagepath.GlobalActionListener
        </action-listener>
    </application>
   
    - 实现监听器代码
    public class GlobalActionListener extends ActionListenerImpl {
      public void processAction(ActionEvent event) throws AbortProcessingException {
            ...... 详细代码见[1]
        }
    }

    基于常规的做法,可以自定义一个异常基类,封装各种异常(业务异常/访问数据库异常等)
    public class BaseException extends Throwable {
        ...
    }
   
    2. 关于消息提示,使用jsf的message和messages标签
    - 将消息加入到FacesContext的当前实例中(注意clientId和消息的级别设置[2])
        FacesContext.getCurrentInstance().addMessage(clientId,
                new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg));
  
    - 全局性错误
        <h:messages globalOnly="true"></h:messages>
   
    - 关于某个控件的消息
        <h:inputText id="field1" value="#{sampleBean.param}"></h:inputText>
        <h:message for="field1"></h:message>

    问题:如何将message用javascript的alert方式显示出来呢?(待解决)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值