spring3+hibernate4+struts2整合问题

时间:2022-08-16 08:23:04
一个注册用户的小例子;运行后UserAction.java文件中
try {
if(userManager.exists(u)){
System.out.print("此用户存在");
return "fail";
}
此段中userManager总是为null。如果需要具体联系。我的QQ号:382692563   加我时备注:解决你java问题
出错效果图为:
spring3+hibernate4+struts2整合问题


1、运行程序后首个页面图如下: spring3+hibernate4+struts2整合问题
2、项目结构图如下: spring3+hibernate4+struts2整合问题
3、UserAction.java文件主要部分代码:
public class UserAction extends ActionSupport {
private String username;
private String password;
private String password2;

@Autowired
    private UserManager userManager;
    
@Override   
public String execute(){
User u=new User();
u.setUsername(username);
u.setPassword(password);

try {
if(userManager.exists(u)){      //注意出错地方userManager为null
System.out.print("此用户存在");
return "fail";
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
userManager.add(u);      //注意出错地方userManager为null
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "success";
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getPassword2() {
return password2;
}

public void setPassword2(String password2) {
this.password2 = password2;
}


}
4、UserDaoImpl.java主要代码如下:
@Component("userDao")
public class UserDaoImpl implements UserDao  {

@Autowired
@Qualifier("mySessionFactory")
private SessionFactory mySessionFactory;

@Override
public boolean checkUserExistsWithName(String username) {
Session s=mySessionFactory.getCurrentSession();
s.beginTransaction();
    long count=(long)s.createQuery("select count(*) from User u where u.username = :username")
      .setString("username", username)
      .uniqueResult();
s.getTransaction().commit();

if(count > 0){
return true;
}
return false;
}

@Override
public void sava(User u) {
Session s=mySessionFactory.getCurrentSession();
s.beginTransaction();
    s.save(u);
    s.getTransaction().commit();
}
}
5、UserManagerImpl.java部分代码如下:

@Service("userManager")  //把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
public class UserManagerImpl implements UserManager {

@Autowired
private UserDao userDao;

@Override
public boolean exists(User u) throws Exception{
return userDao.checkUserExistsWithName(u.getUsername());
}


@Override
public void add(User u) throws Exception {
userDao.sava(u);
}

}
6、beans.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" 
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">

   <context:annotation-config />   
   <context:component-scan base-package="com.registration.*" annotation-config="true"/>  <!--spring通过扫描找@Component注解部分, 把userDAO初始化成一个对象 -->
  
  <!-- 连接数据库部分开始 -->
   <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>classpath:jdbc.properties</value>  <!-- 具体的数据库连接地址文件:jdbc.properties-->
    </property>
   </bean>

   <bean id="myDataSource" destroy-method="close"  class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
   </bean>
   
   <bean id="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
                                                              
    <property name="dataSource" ref="myDataSource"/>
    <property name="packagesToScan">  
       <list>
          <value>com.registration.model</value>   <!-- 将com.spring.model包内实体类全扫描,显示对哪些类做了注解-->
       </list>
    </property>
    
    <property name="hibernateProperties">
       <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  <!-- 使用了mysql方言 -->
        <prop key="hibernate.show_sql">true</prop>
       </props>
     </property>
   </bean>
    <!-- 连接数据库部分结束 -->

   <aop:aspectj-autoproxy /> <!-- 代理-->
   
   
   <!-- 事务处理部分开始 -->
   <bean id="myTxManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
      <property name="sessionFactory" ref="mySessionFactory"/>
   </bean>
   
    <tx:advice id="txAdvice" transaction-manager="myTxManager">
  <tx:attributes>
    <tx:method name="add*" propagation="REQUIRED"/>  <!--  在带有add的所有方法上加事务 -->
  </tx:attributes>
    </tx:advice>
   <!-- 事务处理部分结束 -->
</beans>

12 个解决方案

#1


struts的配置文件里配一个使用spring管理对象的一个配置

#2


struts.xml目前代码如下:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<constant name="struts.devMode" value="true" />

<package name="registration"  extends="struts-default">
      
       <action name="user" class="com.registration.action.UserAction">
            <result name="success">registerSuccess.jsp</result>
            <result name="fail">registerFail.jsp</result>
       </action>
        
</package>

</struts>
希望说的具体点,最好代码写出来。希望加我qq:382692563   联系方便点

#3


userManager添加set方法

#4


@Autowired
    private UserManager userManager;

有上面的注解就可以省略get/set方法了,由spring统一管理

#5


引用 3 楼 z2007130205 的回复:
userManager添加set方法


貌似不能省略set方法

#6


经过测试  有get/set方法不行

#7


private UserManager userManager = new  UserManager () ;
试试

#8


引用 4 楼 leichangfeng 的回复:
@Autowired
    private UserManager userManager;

有上面的注解就可以省略get/set方法了,由spring统一管理

他的这种整合情况不可省略。单纯的spring可以@Autowired,他配置的整合需要set方法才可以注入。

#9


引用 6 楼 leichangfeng 的回复:
经过测试  有get/set方法不行

将action的@Autowired去掉试一下。不需要这个注解。

#10


本帖最后由 zhangly2011 于 2014-05-29 11:18:01 编辑
按照8楼和9楼的说法进行测试,问题依然没有解决。希望高手们联系我(QQ:382692563),我可以把整个项目整体发过去方便你查看。

#11


action注解了吗

#12


                                                                                     楼主结贴感言

    这个帖子发出去后,有许多人参与解决,我也发到一些技术群里讨论过,但很多人都解决不了,其中不乏有一些java几年经验者。通过 1楼 和 8楼 两位提醒,最后问题终于解决了。在这里我特别感谢 8楼的用户 z2007130205 ,他主动加我qq通过远程协助帮我解决问题。一个技术员不仅有一个高深的技术,同时还有一颗热心,让人感到敬佩。我给出的分数自然就属于这两位的了。
1、我已经将此项目打包发到网上了,有需要的朋友可以下载,地址是: http://download.csdn.net/detail/leichangfeng/7420775   
2、有个QQ技术群: 群号:284554283  欢迎大家加入

#1


struts的配置文件里配一个使用spring管理对象的一个配置

#2


struts.xml目前代码如下:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<constant name="struts.devMode" value="true" />

<package name="registration"  extends="struts-default">
      
       <action name="user" class="com.registration.action.UserAction">
            <result name="success">registerSuccess.jsp</result>
            <result name="fail">registerFail.jsp</result>
       </action>
        
</package>

</struts>
希望说的具体点,最好代码写出来。希望加我qq:382692563   联系方便点

#3


userManager添加set方法

#4


@Autowired
    private UserManager userManager;

有上面的注解就可以省略get/set方法了,由spring统一管理

#5


引用 3 楼 z2007130205 的回复:
userManager添加set方法


貌似不能省略set方法

#6


经过测试  有get/set方法不行

#7


private UserManager userManager = new  UserManager () ;
试试

#8


引用 4 楼 leichangfeng 的回复:
@Autowired
    private UserManager userManager;

有上面的注解就可以省略get/set方法了,由spring统一管理

他的这种整合情况不可省略。单纯的spring可以@Autowired,他配置的整合需要set方法才可以注入。

#9


引用 6 楼 leichangfeng 的回复:
经过测试  有get/set方法不行

将action的@Autowired去掉试一下。不需要这个注解。

#10


本帖最后由 zhangly2011 于 2014-05-29 11:18:01 编辑
按照8楼和9楼的说法进行测试,问题依然没有解决。希望高手们联系我(QQ:382692563),我可以把整个项目整体发过去方便你查看。

#11


action注解了吗

#12


                                                                                     楼主结贴感言

    这个帖子发出去后,有许多人参与解决,我也发到一些技术群里讨论过,但很多人都解决不了,其中不乏有一些java几年经验者。通过 1楼 和 8楼 两位提醒,最后问题终于解决了。在这里我特别感谢 8楼的用户 z2007130205 ,他主动加我qq通过远程协助帮我解决问题。一个技术员不仅有一个高深的技术,同时还有一颗热心,让人感到敬佩。我给出的分数自然就属于这两位的了。
1、我已经将此项目打包发到网上了,有需要的朋友可以下载,地址是: http://download.csdn.net/detail/leichangfeng/7420775   
2、有个QQ技术群: 群号:284554283  欢迎大家加入