weixin_42403492 2010-11-16 13:20
浏览 313
已采纳

ssh的spring 无法注入怎么回事

UserInfoDAOImpl.java

@Service
public class UserInfoDAOImpl extends HibernateDaoSupport implements UserInfoDAO {
public boolean login(Userinfo userinfo) {
    boolean isExist = false;
    Userinfo temp = (Userinfo)this.getHibernateTemplate().find("from Userinfo u where u.username=?", userinfo.getUsername()).get(0);
    try {
        if(userinfo.getPassword().equals(temp.getPassword())) 
            isExist = true;
    } catch(Exception e) {
        e.printStackTrace();
    }
    System.out.println("id:" + temp.getId());
    System.out.println("username:" + temp.getUsername());
    System.out.println("password:" + temp.getPassword());
    System.out.println("isExist:" + isExist);
    return isExist;
}

}


LoginAction.java
@Component
@Results(value={
@Result(name="success", location="/login_success.jsp"),
@Result(name="fail", location="/Login.jsp")
})
public class LoginAction extends ActionSupport {
private Userinfo userinfo;

@Autowired
private UserInfoDAO userInfoDAOImpl;

public Userinfo getUserinfo() {
    return userinfo;
}

public void setUserinfo(Userinfo userinfo) {
    this.userinfo = userinfo;
}

public UserInfoDAO getUserInfoDAOImpl() {
    return userInfoDAOImpl;
}

public void setUserInfoDAOImpl(UserInfoDAO userInfoDAOImpl) {
    System.out.println("注入");
    this.userInfoDAOImpl = userInfoDAOImpl;
}

@Action("login")
public String login() {
    System.out.println("id:" + userinfo.getId());
    System.out.println("username:" + userinfo.getUsername());
    System.out.println("password:" + userinfo.getPassword());
    if(userInfoDAOImpl == null)
        System.out.println("error");
    if(userinfo == null)
        return "fail";
    else 
        return (userInfoDAOImpl.login(userinfo))?"success":"fail";
}

}


applicationContext.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:jee="http://www.springframework.org/schema/jee"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
default-lazy-init="true">
&lt;bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt;
    &lt;property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /&gt;
    &lt;property name="ignoreResourceNotFound" value="true" /&gt;
    &lt;property name="locations"&gt;
        &lt;list&gt;
            &lt;value&gt;classpath:application.properties&lt;/value&gt;
        &lt;/list&gt;
    &lt;/property&gt;
&lt;/bean&gt;

&lt;context:component-scan base-package="org.sales.dao.Impl" /&gt;


&lt;!-- 数据源配置,使用应用内的DBCP数据库连接池 --&gt;
&lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close"&gt;
    &lt;!-- Connection Info --&gt;
    &lt;property name="driverClassName" value="${jdbc.driverClassName}" /&gt;
    &lt;property name="url" value="${jdbc.url}" /&gt;
    &lt;property name="username" value="${jdbc.username}" /&gt;
    &lt;property name="password" value="${jdbc.password}" /&gt;

&lt;/bean&gt;

&lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&gt;
    &lt;property name="dataSource" ref="dataSource" /&gt;
    &lt;property name="namingStrategy"&gt;
        &lt;bean class="org.hibernate.cfg.ImprovedNamingStrategy" /&gt;
    &lt;/property&gt;
    &lt;property name="hibernateProperties"&gt;
        &lt;props&gt;
            &lt;prop key="hibernate.dialect"&gt;${hibernate.dialect}&lt;/prop&gt;
            &lt;prop key="hibernate.show_sql"&gt;${hibernate.show_sql}&lt;/prop&gt;
            &lt;prop key="hibernate.format_sql"&gt;${hibernate.format_sql}&lt;/prop&gt;
            &lt;prop key="hibernate.cache.provider_class"&gt;org.hibernate.cache.EhCacheProvider&lt;/prop&gt;

<!-- <prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.ehcache_config_file}</prop>-->

        &lt;/props&gt;
    &lt;/property&gt;

    &lt;property name="packagesToScan" value="org.sales.entity" /&gt;
    &lt;property name="annotatedClasses"&gt;
        &lt;list&gt;
            &lt;value&gt;org.sales.entity.Iteminfo&lt;/value&gt;
            &lt;value&gt;org.sales.entity.Cardinfo&lt;/value&gt;
            &lt;value&gt;org.sales.entity.Positioninfo&lt;/value&gt;
            &lt;value&gt;org.sales.entity.Sellinfo&lt;/value&gt;
            &lt;value&gt;org.sales.entity.Userinfo&lt;/value&gt;
            &lt;value&gt;org.sales.entity.Voteinfo&lt;/value&gt;&lt;/list&gt;
    &lt;/property&gt;&lt;/bean&gt;

&lt;bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate" &gt;
    &lt;property name="sessionFactory" ref="sessionFactory"/&gt;
&lt;/bean&gt;

&lt;bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;
    &lt;property name="sessionFactory" ref="sessionFactory" /&gt;
&lt;/bean&gt;

&lt;tx:annotation-driven transaction-manager="transactionManager" /&gt;

&lt;bean id="CardinfoDAO" class="org.sales.entity.CardinfoDAO"&gt;
    &lt;property name="sessionFactory"&gt;
        &lt;ref bean="sessionFactory" /&gt;
    &lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="IteminfoDAO" class="org.sales.entity.IteminfoDAO"&gt;
    &lt;property name="sessionFactory"&gt;
        &lt;ref bean="sessionFactory" /&gt;
    &lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="PositioninfoDAO"
    class="org.sales.entity.PositioninfoDAO"&gt;
    &lt;property name="sessionFactory"&gt;
        &lt;ref bean="sessionFactory" /&gt;
    &lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="SellinfoDAO" class="org.sales.entity.SellinfoDAO"&gt;
    &lt;property name="sessionFactory"&gt;
        &lt;ref bean="sessionFactory" /&gt;
    &lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="UserinfoDAO" class="org.sales.entity.UserinfoDAO"&gt;
    &lt;property name="sessionFactory"&gt;
        &lt;ref bean="sessionFactory" /&gt;
    &lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="VoteinfoDAO" class="org.sales.entity.VoteinfoDAO"&gt;
    &lt;property name="sessionFactory"&gt;
        &lt;ref bean="sessionFactory" /&gt;
    &lt;/property&gt;
&lt;/bean&gt;

</beans>


web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
&lt;context-param&gt;
    &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;
    &lt;param-value&gt;classpath*:applicationContext.xml&lt;/param-value&gt;
&lt;/context-param&gt;

&lt;filter&gt;
    &lt;filter-name&gt;OpenSessionInViewFilter&lt;/filter-name&gt;
    &lt;filter-class&gt;org.springframework.orm.hibernate3.support.OpenSessionInViewFilter&lt;/filter-class&gt;
    &lt;init-param&gt;      
      &lt;param-name&gt;singleSession&lt;/param-name&gt;      
      &lt;param-value&gt;true&lt;/param-value&gt;      
    &lt;/init-param&gt;
&lt;/filter&gt;

&lt;listener&gt;
    &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;
&lt;/listener&gt;

&lt;filter&gt;
    &lt;filter-name&gt;struts2Filter&lt;/filter-name&gt;
    &lt;filter-class&gt;org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter&lt;/filter-class&gt;
&lt;/filter&gt;

&lt;filter-mapping&gt;
    &lt;filter-name&gt;struts2Filter&lt;/filter-name&gt;
    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;

&lt;filter-mapping&gt;
    &lt;filter-name&gt;OpenSessionInViewFilter&lt;/filter-name&gt;
    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;

&lt;welcome-file-list&gt;
    &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
&lt;/welcome-file-list&gt;

</web-app>



结果在LoginAction.java里面输出:
id:null
username:username
password:USERNAME
error
说明: error是当被注入的属性为空的时候输出.
求解~

异常(网页上的):
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NullPointerException
org.sales.actions.LoginAction.login(LoginAction.java:53)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
问题补充
xixix2004 写道
有异常吗。

敢不敢把异常发出来看一下。

发了
问题补充
xixix2004 写道
好吧,应该不需要异常,请把ACTION里定义的DAO的变量名,变得和xml里定义的BEAN ID属性一致。

xml里面没有对应的bean,因为使用注释
问题补充
yyf365 写道
可能和楼主的应用写法不太相同,请问你其他的service是否能注入成功呢?,不过是否能试试在applicationContext配置文件中的声明方式换一种呢?

如:
<bean id="UserInfoDAO"
class="UserInfoDAOImp">
</bean>
这种形式注入,实例化由spring托管,而在action中只对UserInfoDAO的service进行注入呢

而如果出了该service无法注入外,其他其余的service都能正常注入使用,那就另想办法了

可是这种方法有点麻烦,我想实现注释注入,xml文件里面有个扫描的:
<context:component-scan base-package="org.sales.dao.Impl" /> 
问题补充
已经试过在 applicationContext.xml 文件里面添加
<bean id="userInfoDAOImpl" class="org.sales.dao.Impl.UserInfoDAOImpl">
</bean>
<bean id="loginAction" class="org.sales.actions.LoginAction">
<property name="userInfoDAOImpl">
<ref bean="userInfoDAOImpl" />
</property>
</bean>


异常信息一样.
问题补充
xixix2004 写道
bbinglongg 写道
xixix2004 写道
好吧,应该不需要异常,请把ACTION里定义的DAO的变量名,变得和xml里定义的BEAN ID属性一致。

xml里面没有对应的bean,因为使用注释



你完全没看懂我在说什么。

private UserInfoDAO userinfoDAO; 


<bean id="userinfoDAO" class="org.sales.entity.UserinfoDAO">

<property name="sessionFactory">

<ref bean="sessionFactory" />

</property>

</bean>






在它上面有一句:
@Autowired

是自动注入的意思
问题补充
xixix2004 写道
<ref bean="UserInfoDAO" />这里的REF的BEAN, 写你之前定义的BEAN的ID。你可明白?

明白
问题补充
dwbin 写道
loginAction没有进行spring托管。
这个类spring不会自己进行注入的。你的ssh整合有问题


那我应该怎么修改呢?
问题补充
dwbin 写道
loginAction没有进行spring托管。
这个类spring不会自己进行注入的。你的ssh整合有问题

@Autowired
这个标签里面已经是注入了
  • 写回答

10条回答 默认 最新

  • xiaozheyang 2010-11-16 13:20
    关注

    会不会是struts2-spring插件包没有加进来?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器