随笔-67  评论-522  文章-0  trackbacks-0
    这是本系列的最后一章,大象对示例进行适当的扩充并说明。
    其实到第四篇,对于示例的说明就已经全部讲完了,如果按照这样的例子,很难有什么值得学习的地方。大象本着写点有用东西的原则,在这章,对示例进行一下适当的扩充并说明。
    第五部分:扩展框架
    paramsPrepareParamsStack拦截器栈
    paramsPrepareParamsStack这个拦截器栈是在struts2-default.xml中定义的,里面包含了很多个拦截器,最重要的是这三个:paramspreparemodelDriven。我们只要记住这样几点。
    params:它负责将请求参数值设置到Action中与之同名的属性中。
    prepare:当Action实现了Preparable接口时,这个拦截器就会调用prepare()方法。如果你有想在execute()方法之前执行的逻辑处理,它就可以帮你完成这个功能。
    modelDriven:如果Action实现了ModelDriven接口,这个拦截器就会把getModel()方法中的返回结果压入值栈。这就意味着,可以在结果页面上直接使用model对象的属性。
    它的执行顺序是这样的
    首先,params拦截器会给action中的相关参数赋值,如idusernamepassword等等。
    然后,prepare拦截器执行prepare()方法,prepare()会根据参数,如id,去调用相关的方法,设置model对象。当然,实现的这个接口方法由你自己来定义,不局限只设置model之类的功能。
    接着,modelDriven拦截器会将model对象压入值栈,因为它是把getModel()方法中的返回结果放到值栈中,而这个方法的返回类型是个泛型参数,在实现ModelDriven接口的时候,可以给它指定一个具体的对象类型,因此返回类型也将是这个指定的对象类型,如ModelDriven<User>
    最后,params拦截器会将参数再赋值给model对象。
    思考修改与保存这两种动作。当点击人员修改时,请求为:user!input.action?id=1params拦截器会将id参数值设置到Action中的id属性,请一定注意,id属性要有set()方法,然后prepare拦截器开始在prepare()方法中,根据这个id值取得User对象,接着modelDriven会调用getModel()方法,此时,方法中返回的是user对象,所以会把user加入到值栈中,最后再执行一次params拦截器,但这时没有其它的参数值需要赋值给user对象,所以程序会接着往下走,这里假定没有其它的业务逻辑,执行返回,字符串为input,根据前面讲的插件知识,结果页面为user-input.jsp,那么就跳转到修改页面了,而且页面中表单域将显示数据库中的值。如果理解了修改,那么保存也就清楚了。
    prepare()方法虽然不错,但是也有弊端,那就是它会对Action中的每个方法都进行拦截,不管你是执行execute还是input,还是其它的自定义方法,它都会对其拦截,这当然不是我们所希望的。那有没有更好的方式?答案是肯定的,请接着往下看。
    prepareMethedName
    使用prepare拦截器的另一种形式,在prepare名称后面加上需要拦截的方法名。比如,你要拦截input方法,可以写成prepareInput,需要拦截save方法,就写上prepareSave。采取这样的方式后,将会在执行这些方法之前时,才对它们进行拦截。
    例如,请求role!input.action,会执行RoleAction中的input方法,如果我们设置了prepareInput方法,则会先进入此方法执行,执行完后再回到input方法往下执行。
    请注意,在使用这种方式时,Preparable接口定义的prepare()方法体内不要含有任何代码,就是说给这个方法一个空实现。这样,它就什么都不做,所有的拦截处理就全部交由相应的prepareMethedName来完成。
    
    
    它们在每个对应的方法之前执行。prepareEntity就是来初始化实体对象,然后由modelDriven拦截器将getModel()方法中的返回结果放入值栈,当返回页面时,就可以直接取值了。
    StrutsAction
    重新定义一个基类,里面封装大部分的通用操作,主要依靠泛型来实现,将hibernateDao注解进来,通过继承这个基类进行基本的CRUD操作。本文末尾提供示例源码下载,里面有详细的注释,这里我只贴出部分重要代码进行说明,为了行文需要,有些注释去掉了,但源码里面都有,请大家放心。
    
    通过扩展ActionSupport,使用泛型参数,构造函数根据反射得到T的具体类型。
    
    这就是默认的执行方法,基本的操作,在这个超类里面都进行了定义,每个方法里面设置的以do开头的方法,是方便让子类进行覆盖,当基本的业务逻辑无法满足我们的需求时,就可以在子类重写这些方法。
    
    方法有默认实现,主要是列表显示,保存和删除,新增和修改已经有getModel()方法取得实体,在页面上使用s标签就可以直接取值,除非有特殊的业务需求,否则不用覆盖doInputEntity()doViewEntity()方法。请注意,当需要实现自己的逻辑时,只需要覆盖上面定义的这些方法,而不用重写executeinput之类。
    我对HibernateDao又进行了适当的扩展与修改,提供了更多的基本封装方法,不过大家还可以继续添加。里面都有详细的注释,这里就不在赘述了。
    功能扩展
    我对例子做了两个功能,一个是角色表的增加、修改、删除、查看,另一个就是用户表的查询。可以从源码中看到,我在RoleAction中没有写一行关于增删改查的代码,因为它属于基本操作,超类中已经封装好了,所以这部分的代码都省了。对于用户表的查询,我覆盖了doListEntity()方法,在业务层进行条件封装,执行查询,返回结果。
    
    这个list就是在超类中定义的,因为默认实现中也用到了list,另外list有一个get方法,用于在页面中显示。如果不想采取方式取得list集合,就重写doListEntity()方法。这里说明下,我是没有加分页功能的,大家可以按自己的方式添加分页查询。
    在用户查询方法中,我使用的是QBC对象查询,因为这种方式很简洁,不过我在HibernateDao中也写了HQLSQL方式的查询方法,并进行了封装,可以很方便的调用。
    
    
    这个queryResult方法的定义,你可以改为传递用户名与角色ID的参数,大象在这里就是为了方便,直接使用Request请求。这里userDao调用的query方法是在HibernateDao里面封装的,因为继承了HibernateDao,就直接在Service层拿来用了。至于具体的,可以去看源码。
    页面部分没有进行大的调整,主要是将role-list.jsp重命名为role.jsp,因为使用的是超类的默认实现。添加了role-input.jsprole-view.jsp两个文件,并在user.jsp中,加入了查询条件。这些代码都很简单就不再贴了,而且前一篇也贴过一部分。
    对于这个例子的完整讲解说明就到此结束了。大象还想补充说明一下,这个例子只适用于学习,不适合商用,想在实际项目中运用,还需要对框架做大量的改造工作。本系列只是基于SSH2入门学习之用,源码中不含jar包,下图是本例中所需的最少jar文件,大家只要下载了springstrutshibernate三个完整压缩包,那么这些jar基本上都包含了。
    
    发布并启动Tomcat,然后输入访问地址:http://localhost:8080/ssh2 运行该示例,看看效果。
    源码下载: ssh2  ssh2-maven 
    本文为菠萝大象原创,如要转载请注明出处。http://www.blogjava.net/bolo
posted on 2010-05-30 13:34 菠萝大象 阅读(17008) 评论(69)  编辑  收藏 所属分类: Struts2

评论:
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-05-30 22:13 | ybj316
你好!能否把要用到的包压缩一下提供下载?运行tomcat时报错!
2010-05-30 22:10:10,000 ERROR [org.springframework.web.context.ContextLoader] - <Context initialization failed>
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from file [D:\Tomcat 5.5\webapps\ssh2\WEB-INF\classes\applicationContext.xml]; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:420)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-05-31 08:45 | 菠萝大象
@ybj316
你的版本是什么?这个错误是没有Aspectj的jar包,你应该用了struts2.1.8.1吧,Aspectj在spring里面有,另外我博客里面空间快满了,没法上传这些jar  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-08-06 17:07 | tt
很好的设计思想,我看了两天大概还只是大概看懂,充分的利用泛型 继承 多态,代码简洁明了!没这个文字介绍 真的看不懂。主要是struts2 annotation 的资料太少了!我想把这个思路充分利用到工作中,想在实际项目中运用。不知道为什么你说只能做学习用?  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-08-06 17:09 | tt
没jar包的 找我!qq:87513277   回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-08-08 21:24 | 菠萝大象
@tt
原因就是这个框架太简单了,比如没有登录拦截器,AOP切面,自定义标签,分页功能,监听器,模板,等等等等。。。。总之可以扩充的东西还有很多很多,我这样写,是方便大家学习。在你们理解后,就可以自己来扩展这个框架,也可以按自己的理解自己建框架。  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)[未登录] 2010-08-20 13:38 | 阿飞
按照你的例子(只改了数据库连接)用TOMCAT运行起来没有错误,但是访问时候都出现404错误(在HelloAction中打印语句,发现根本没有调用HelloAction),请问时什么原因。  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-08-21 20:49 | 菠萝大象
@阿飞
这位童鞋,例子是没问题滴,你是否都按我说的做过呢?  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)[未登录] 2010-08-31 09:18 | kang
之前通过配置文件来进行 注入的时候,都是需要通过接口来进行注入的
请问为什么现在没有注入接口,而是直接注入了实现类,那既然可以直接调用实现类,为什么还需要注入,我直接调用就的了。。。。

初学者,不解之,望告之!  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-08-31 09:33 | 菠萝大象
@kang
这位童鞋,是这样的,因为我采用的是注解方式,<context:component-scan base-package="com.bolo.examples" />就会扫描指定的包及子包下全部有@Service,@Repository注解的类,将它们加入到spring容器中来,供程序调用,同时又因为我没用接口而直接使用类所以在处理事务的时候就要用到cglib代理方式,请注意<aop:config proxy-target-class="true">这句话,这个proxy-target-class默认是为false的,默认为接口。请你看下第二篇的配置文件说明。  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-08-31 11:13 |
大象,可以加我MSN吗?
想咨询你一些问题。
谢谢:kzkking@live.cn  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-08-31 11:21 | 菠萝大象
@坤
不好意思啊,我从来不用MSN,只用QQ  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)[未登录] 2010-08-31 11:33 | kang
@菠萝大象
大象,那我如果想使用接口来进行注入

除了修改 <aop:config proxy-target-class="false"> 外 还需要修改哪些呢?  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)[未登录] 2010-08-31 11:34 |
@菠萝大象
那加我QQ吧
262735260 谢谢了!  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-09-02 16:08 | Terry Wang
读完了这一系列文章,看得出大象真的是用心在写作,精神可嘉,博文不错,博主加油,大象加油!  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-09-02 16:18 | 菠萝大象
@Terry Wang
谢谢支持,我会更努力的!  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-09-06 10:48 | 迷途的羔羊
2010-09-06 10:45:19,777 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setSessionFactory(org.hibernate.SessionFactory)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-09-06 10:45:19,777 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.hibernate.SessionFactory org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSessionFactory()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-09-06 10:45:19,777 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setHibernateTemplate(org.springframework.orm.hibernate3.HibernateTemplate)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-09-06 10:45:19,777 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.springframework.orm.hibernate3.HibernateTemplate org.springframework.orm.hibernate3.support.HibernateDaoSupport.getHibernateTemplate()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-09-06 10:45:19,777 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.dao.support.DaoSupport.afterPropertiesSet() throws java.lang.IllegalArgumentException,org.springframework.beans.factory.BeanInitializationException] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-09-06 10:45:19,949 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setSessionFactory(org.hibernate.SessionFactory)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-09-06 10:45:19,949 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.hibernate.SessionFactory org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSessionFactory()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-09-06 10:45:19,949 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setHibernateTemplate(org.springframework.orm.hibernate3.HibernateTemplate)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-09-06 10:45:19,949 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.springframework.orm.hibernate3.HibernateTemplate org.springframework.orm.hibernate3.support.HibernateDaoSupport.getHibernateTemplate()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-09-06 10:45:19,949 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.dao.support.DaoSupport.afterPropertiesSet() throws java.lang.IllegalArgumentException,org.springframework.beans.factory.BeanInitializationException] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
出了一堆警告,什么数据也没从数据库查询出来,这是什么原因啊?  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-09-06 10:54 | 菠萝大象
@迷途的羔羊
这位童鞋,你确定都是按我说的做的吗?你将示例下载后运行了没有?你看最后一行有异常出现了,你没有加入事务控制。  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-09-06 16:00 | 迷途的羔羊
@菠萝大象
我运行了你的代码,也是同样的警告,但是能查询,打开show_sql,可以看到你的代码会打印出sql,我的不会打印sql,也就没有结果了,这是怎么回事啊?  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-09-06 16:09 | 菠萝大象
@迷途的羔羊
你的代码是自己写的还是在我的基础上改的?如果你想自己写,请一定要完全理解后再做。  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-09-06 17:18 | 迷途的羔羊
@菠萝大象
呃,找到原因了,实体类的配置映射目录没有要比实际的包路径少一层,好莫名的原因啊  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-09-06 19:32 | 菠萝大象
@迷途的羔羊
我在第二篇配置文件详解中就讲过,请注意这个路径的写法,如果写的不对,是不会映射实体的。  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-10-08 16:04 | 窝窝影视
基本理解了 ,真是个细心的人啊  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-10-20 18:05 | yiyicun
很好 对于初学者很合适···  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-12-03 16:43 | 淑程
您好:大象先生,认识你很高兴!
看了您的文章,我深受启发,非常感谢您!
我现有一问题请教您:
我用weblogic10.3 + oracle10g + myeclipse8 ,发布了您的例子!结果出来了,但是同样报了好多 warn!
麻烦您 帮我看看是怎么回事
2010-12-03 16:18:06,171 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setSessionFactory(org.hibernate.SessionFactory)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-12-03 16:18:06,203 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.hibernate.SessionFactory org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSessionFactory()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-12-03 16:18:06,203 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setHibernateTemplate(org.springframework.orm.hibernate3.HibernateTemplate)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-12-03 16:18:06,203 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.springframework.orm.hibernate3.HibernateTemplate org.springframework.orm.hibernate3.support.HibernateDaoSupport.getHibernateTemplate()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-12-03 16:18:06,203 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.dao.support.DaoSupport.afterPropertiesSet() throws java.lang.IllegalArgumentException,org.springframework.beans.factory.BeanInitializationException] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-12-03 16:18:06,468 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setSessionFactory(org.hibernate.SessionFactory)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-12-03 16:18:06,484 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.hibernate.SessionFactory org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSessionFactory()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-12-03 16:18:06,484 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setHibernateTemplate(org.springframework.orm.hibernate3.HibernateTemplate)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-12-03 16:18:06,484 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.springframework.orm.hibernate3.HibernateTemplate org.springframework.orm.hibernate3.support.HibernateDaoSupport.getHibernateTemplate()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
2010-12-03 16:18:06,484 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.dao.support.DaoSupport.afterPropertiesSet() throws java.lang.IllegalArgumentException,org.springframework.beans.factory.BeanInitializationException] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
Hibernate: select user0_.id as id1_0_, user0_.name as name1_0_, user0_.role_id as role3_1_0_ from users user0_ where user0_.id=?
ID: 1 姓名: 张三
Hibernate: select role0_.id as id0_0_, role0_.name as name0_0_ from role role0_ where role0_.id=?
ID: 1 角色名: 超级管理员  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-12-03 16:49 | 淑程
我只做了一个修改,就是把 User实体类中 的 @Table(name = "user") 改为 了 @Table(name = "users")  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2010-12-04 23:32 | 菠萝大象
@淑程
呵呵,能对你有帮助是我最快乐的事,对于你的这个疑问,其实不算什么问题,如果你看过spring的HibernateDaoSupport源码,就应该明白了,setSessionFactory前面定义了final,就是不可覆盖,对于使用cglib代理来说,它是会对方法进行覆盖的,要将数据源连接工厂注入到HibernateDaoSupport中,这样我们才能在dao中进行使用,从而与数据库打交道,所以这是spring源码设计成了这样,要想让这些警告不出现有两种方法,一是在log4j日志设置中,将HibernateDaoSupport的完整路径日志级别设置成这样,org.springframework.orm.hibernate3.support.HibernateDaoSupport=ERROR 另一个方法就是不使用spring的HibernateDaoSupport,而是采取纯Hibernate方式,就是说不继承spring的HibernateDaoSupport  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)[未登录] 2011-01-10 16:04 | test
你这项获取出来的HibernateDaoSupport里的session为空  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-01-11 08:40 | 菠萝大象
@test
这些例子我都测试过,另外如果要是有问题,前面会有人提出来的,你再检查一下,是不是哪里没有设置正确  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)[未登录] 2011-01-11 10:52 | test
@菠萝大象
不知道为什么 我进入action里面dao不能注入 manager也不能注入。全部为null,我直接用的你的源码。也没报什么错误 启动的时候 奇怪了  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-01-18 09:40 | taote
我收藏了您的博客,内容写的很好,很实在。另外,我也比较同意博主的许多观点,希望博主继续努力,继续出精品。呵呵。。。关注中。。。。  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-01-18 11:02 | 菠萝大象
@test
这个真没办法帮你了,应该还是设置问题,如果代码有问题的话,我是不会放上来的  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-01-18 11:02 | 菠萝大象
@taote
谢谢  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-03-22 18:23 | 楚风狂人
大象,能不能加我QQ,我最近在看你的博文,学习注解编程的思路,有问题希望你能指点一下,谢谢,
QQ:605501800  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-04-03 23:30 | java小菜
看完了这个全注解文章,觉得收获很多,大象大哥的经验对我个人真的很有用,个人觉得这些文章真的是用心写,而不是像很多都是复制粘贴,支持,另外觉得图片加上自己的水印没什么问题的,不影响阅读就好,毕竟这是自己的原创,加上自己的水印没什么不妥  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-04-26 15:57 | 下着雪的夜
大象,我刚接触sturts2,读了你关于SSH2全注解实例详解的文章觉得受益匪浅。在此先顶你,知道你是追求完美的作家,期待你更好的新文章,加油!!!  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-04-26 15:59 | 菠萝大象
@下着雪的夜
大象我不是为了追求完美,而是现在忙得人快挂了,哪还有时间写博客,非常杯具,我是一只杯具象!  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-04-27 09:10 | 下着雪的夜
大象,快到5.1了,多加休息,注意身体,再次顶你。谢谢你的博文,体会到你是在用心写  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-05-05 16:25 | 王旭
大象哥,你好人做到底吧,把jar包也都放进去吧。呵呵····  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-05-16 11:33 | 李亮
可不可以把源码发下  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-05-16 11:35 | 菠萝大象
@李亮
我就在这篇放了源码啊,你确定看完了没?  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-05-16 11:43 | 李亮
@菠萝大象
嗯 已经下来了 刚没注意  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-05-16 11:51 | 李亮
留个联系方式好吗 我QQ568442868 但现在公司不让上Q 加上我吧 不懂的请教下  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-05-18 12:42 | 李亮
把jar包发下好吗 我按这你写的那些jar包在网上下了一堆 最后一个一个对比 可最后还是报错  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-05-18 13:38 | 菠萝大象
@李亮
这位童鞋,不是大象不放,而是blogjava的空间有限啊,另外我在文章里不是说了吗,把spring,struts和hibernate这三个压缩包下下来后,很多jar包就都有了,哪需要像你说的,去网上下一堆包,如果你会用maven的话,就更简单了,大象的下篇spring mvc 3+spring 3+mybatis 3系列将采用maven来构建,这样就让大家不用浪费时间去找jar包了  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-05-19 16:50 | 李亮
源码里怎么没有StrutAction啊  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-05-19 16:58 | 菠萝大象
@李亮
这个肯定是有的  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-12-31 17:14 | 阿斯蒂芬
@阿飞我也碰到你的问题了 你解决了吗  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2011-12-31 17:41 | 阿斯蒂芬
@阿飞
能告诉我你的解决方法吗  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2012-01-01 20:45 | 阿斯蒂芬
2012-1-1 20:43:26 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Program Files\Java\jdk1.6.0_20\jre\bin;D:\Program Files\Apache Software Foundation\Tomcat 7.0\bin
2012-1-1 20:43:28 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["http-bio-8080"]
2012-1-1 20:43:28 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["ajp-bio-8009"]
2012-1-1 20:43:28 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 2268 ms
2012-1-1 20:43:28 org.apache.catalina.core.StandardService startInternal
信息: Starting service Catalina
2012-1-1 20:43:28 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/7.0.22
2012-1-1 20:43:28 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory docs
2012-1-1 20:43:29 org.apache.catalina.util.SessionIdGenerator createSecureRandom
信息: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [109] milliseconds.
2012-1-1 20:43:29 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory examples
2012-1-1 20:43:29 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: contextInitialized()
2012-1-1 20:43:29 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextInitialized()
2012-1-1 20:43:29 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@1a550f9')
2012-1-1 20:43:29 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory host-manager
2012-1-1 20:43:29 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory manager
2012-1-1 20:43:29 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory ROOT
2012-1-1 20:43:30 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory ssh2
2012-1-1 20:43:30 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test
2012-1-1 20:43:39 com.sun.faces.config.ConfigureListener contextInitialized
信息: Initializing Sun's JavaServer Faces implementation (1.2_04-b07-FCS) for context '/test'
2012-1-1 20:43:40 com.sun.faces.spi.InjectionProviderFactory createInstance
信息: JSF1048: PostConstruct/PreDestroy annotations present. ManagedBeans methods marked with these annotations will have said annotations processed.
2012-1-1 20:43:40 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]
2012-1-1 20:43:40 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-bio-8009"]
2012-1-1 20:43:40 org.apache.catalina.startup.Catalina start
信息: Server startup in 12583 ms



还是打不开hello.action 报404  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2012-01-07 22:16 | 阿斯蒂芬
allRoals 是怎么得到的啊  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2012-02-23 14:00 | IT菜鸟
哥们,你好,看了你写的这个系列的博客,我从中真的获益良多,以前不懂的问题,现在也基本弄清楚了,还有一些是我没有遇到过却很实用的方法,在这里,我真的很感谢你的分享。另外,能不能麻烦你把你的这个源码发到我邮箱去呢,虽然跟着你的思路做了一遍,也花了很长的时间进行排错,但是还是会出现一些地方不慎了解,希望能够通过你完整的代码给自己一些启示。我的邮箱:592096788@qq.com。谢谢了。  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2012-03-10 19:41 | 花之恋
你好,刚看了你的博客,自己也试着做了一遍,最后还是出现了“迷途的羔羊”所说的错误,能把完整的源码发我一份吗,包括JAR包,万分感谢呀,wolfsept@qq.com,一切为了SSH2.  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2012-03-11 12:03 | 花之恋
代理的问题调通了,把tx:annotation-driven这个注释去掉,屏蔽掉aop:config及tx:active即可。  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)[未登录] 2012-06-01 10:14 | king
哥们 我在这个框架下 加入 jacob.jar进行 word转HTML 可在执行ActiveXComponent app = new ActiveXComponent("Word.Application") 时 单步跟踪提示 Source not found for WordToHTML$$FastClassByCGLIB$$c5de4c5b.invoke(int, Object, Object[]) line: not available 其它无任何错误信息,是不是被哪个拦截器拦截了?请指教一下  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2012-06-01 10:35 | 菠萝大象
@king
你跟踪到哪里了?是jacob里面么?那得要源代码才行了  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2012-10-13 21:36 | sjmhai
大象我用你的框架拓展了一下发现
@Autowired标注后我发现他的数据是时时的。
比如在
public class LookAction extends StrutsAction<Look>{
@Autowired
private LookManager lookManager;
public String rebuild() throws Exception{
Look look =lookManager.getLook(1);
for(int 1=0;i<10;i--){
zid=look.getZid();
System.out.println(zid);
look.setZid(i);
hibernateDao.save(look);
}
}
}
中 输出的zid是随着存储的值变化而变化的。大象能帮我解释一下么?  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2012-10-16 11:45 | 菠萝大象
@sjmhai
这个例子中用到了JPA,其中有个主键生成策略,在每个实体对象的ID属性上,都作了标识,你可以看看,如果还不清楚,可以先看看我之前的 学习JPA——Hibernate Annotation使用实例这篇文章,对这个有过说明。  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)[未登录] 2013-01-05 15:48 | kevin
怎么和springside这么像  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2013-01-05 15:52 | 菠萝大象
@kevin
借鉴了springside,同时又作了改进,最大的不同应该是我对整个整合过程进行了详细分析,而springside却只有一些示例演示。  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2014-01-14 19:32 | sss
@菠萝大象

大象哥啊
我看回复中有几个都遇到这个问题,请帮我们看看吧。主要是struts2的错
http://bbs.csdn.net/topics/390693520?page=1#post-396590991  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2014-01-15 09:10 | 菠萝大象
@sss
这位同学,看起来你应该是刚刚开始学习struts2,应该也下了我的源码,我的建议是你先什么都不要改,直接运行我的示例程序,先看下运行结果,然后将我的第四篇文章完全看懂了之后再动手做,例子是没问题的,不然这么长时间早就会有很多人反应了。  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2014-03-11 11:14 | mlc
@菠萝大象
大象你好!在测试你的例子的时候出现了好多jar包冲突问题,能不能把你这个项目的jar包发给我一下,谢谢你了~(chenmeil@foxmail.com)  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2014-03-11 17:04 | 菠萝大象
@mlc
实在是抱歉,这个例子我写的很早了,那时候没用maven,最近刚换工作,事情比较多,等我有空用maven重构一次发上来,供有需要的朋友下载。  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2014-03-13 12:02 | mlc
谢谢,问题我解决了,原来是我用了hibernate4,而spring2兼容hibernate3的类有部分类已经不适用了。另外,我想问下大象,在第四章中(“假如说,你想执行其它方法该怎么办呢?可以在location里面这样定义,location="user!input.action"。”),里面的为什么用到“!”?@菠萝大象  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2014-03-14 09:18 | 菠萝大象
@mlc
你可以再去看下这一段说明,默认是执行execute方法,所以就是user.action,其它的方法就要加上方法名了。  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2014-03-14 10:33 | mlc
location="user!input.action",user后边的叹号有什么作用?@菠萝大象  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2014-03-14 15:13 | mlc
哦,懂了。用来连接除默认方法外的其它方法。谢谢大象!@菠萝大象

  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2014-03-15 01:51 | acgz
<s:select name="role_id" list="allRoles" listKey="id" listValue="name" headerKey="" headerValue="--请选择--" /> ~(引自user.jsp),这行什么意思呀?报错:org.apache.jasper.JasperException: tag 'select', field 'list', name 'role_id': The requested list key 'allRoles' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location],allRoles方法返回的是List型,用iterator迭代输出,怎么会错了呢?求大象答疑啊~~~
@菠萝大象  回复  更多评论
  
# re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 2014-03-20 16:23 | 菠萝大象
@acgz
你运行我的这个例子有问题?allRoles是一个list,在UserAction代码里面有个getAllRoles方法,它用来把allRoles的数据放入到struts2的栈里面,这样在页面上就可以用struts2的标签取到,listKey="id" listValue="name"都是Role这个对象的属性,这个必须与Role里面保持一致  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: