基类

      在SSH的基础上,再加一套基类,主要用于对象的增、删、改、ID主键查询等。

        1.关键成员变量

        entity、entityClass、entityClassName

        2.泛型、反射

        利用泛型和反射技术,生成、保存、和查询实体对象。

        3.Preparable、ModelDriven

  • Preparable预处理接口

        publicvoid prepareInput() {

            this.prepareModel();

         }

   

         publicvoid prepareShow() {

             this.prepareModel();

         }

   

         protectedvoid prepareModel() {

             if(getSID() !=null) {

                   entity = getBaseService().get(getSID());

                  if(entity ==null) {

                      thrownew IllegalArgumentException("id not exist");

                   }

              }

         }

   

         publicvoid prepare()throws Exception {

              if(null == entity) {

                  entity =entityClass.newInstance();

             }

         }

  •  ModelDriven模型驱动

        在struts2中,提供了一种直接使用领域对象的方式,就是让action实现ModelDriven接口,ModelDriven让你可以直接操作应用程序中的领域对象,允许你在web层和业务层使用相同的对象。

         public T getModel() {

             return  entity;

          }

  • 执行顺序:Preparable --> ModelDriven --> Action方法

        4.条件查询

        对于仓储操作的查询细节不应该暴漏给Service层,更不应该暴漏给Action层,所以条件查询要放在自己Dao的实现类中。

        一般列表页面只表示用户特别关注和常用的字段,对于列表查询,不需要把对象所有字段都取出来,这样一是取数据会慢一点、传输数据也会慢、占用不必要的内存,所以采用hibernate中“new map”方式来取得所需字段。

        5.分页

        分页所需的变量和行为,封装到基类中。

        6.Message

        利用Struts2,集中管理Message。

        7.异常处理

        让SSH框架来进行异常处理(AOP技术),方法中只保留业务逻辑代码,但在出现异常后,控制台和日志中要输出最接近、详细的异常信息。

        (1)在struts2中的defaultStack拦截器中配置参数

            <interceptor-refname="defaultStack">

                 <paramname="exception.logEnabled">true</param>  

                 <paramname="exception.logLevel">error</param>

             </interceptor-ref>

        (2)配合log4j中设置

       log4j.logger.com.opensymphony.xwork2 = WARN 

       log4j.logger.com.opensymphony.xwork2 = ERROR

        (3)配置struts2全局异常

            <global-exception-mappings>

                    <exception-mappingresult="error"exception="java.lang.Exception"></exception-mapping>

             </global-exception-mappings>

 

            <global-results>

                  <resultname="error">/common/globalerror.vm</result>

            </global-results>

        (4)全局异常页面(VM中实现)

            #* @vtlvariable name="exception" type="java.lang.Exception" *#  

            #* @vtlvariable name="result" type="com.jd.common.web.result.Result" *#  

           #if($exception)  

                 #if($!exception.class.simpleName=="NoSuchMethodException")  

                        $!response.setStatus(404)  

                        404! 您请求的内容不存在  

                 #else 

                      出错了:$exception

                      ##${exception.printStackTrace()}

                 #end  

           #elseif($result)  

                 #if($result.resultCode)  

                       #showSimpleError()      

                 #else 

                       系统错误  

                 #end  

          #end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值