我现在在做一个SSH框架的java的程序
在spring注入时出现问题
页面报出的错误为:
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception java.lang.NullPointerException
com.plant.action.LoginAction.login(LoginAction.java:18)
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)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
com.plant.commons.http.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:119)
我在applicationContext.xml里注入了 plantbasicinfoManager
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.microsoft.sqlserver.jdbc.SQLServerDriver">
</property>
<property name="url"
value="jdbc:sqlserver://localhost:1433;databaseName=Plant">
</property>
<property name="username" value="sa"></property>
<property name="password" value="disable123"></property>
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
    <value>com/plant/dto/TAnnualoperationinfo.hbm.xml</value>
<value>com/plant/dto/TCategory.hbm.xml</value>
<value>com/plant/dto/TCategoryEn.hbm.xml</value>
<value>com/plant/dto/TPlantbasicinfo.hbm.xml</value>
<value>com/plant/dto/TPlantbasicinfoEn.hbm.xml</value>
<value>com/plant/dto/TPlantStatus.hbm.xml</value>
<value>com/plant/dto/TPlantStatusEn.hbm.xml</value>
<value>com/plant/dto/TStakeholderinfo.hbm.xml</value>
<value>com/plant/dto/TStakeholderinfoEn.hbm.xml</value>
<value>com/plant/dto/TUnitinfo.hbm.xml</value>
<value>com/plant/dto/TUnitinfoEn.hbm.xml</value>
</list>
</property>
</bean>
<bean id="hibernateDao" class="com.plant.dao.impl.HibernateDAO">
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean>

<bean id="manager" class="com.plant.service.impl.AbstractManager">
<property name="dao"> <ref bean="hibernateDao" /></property>
</bean>

<bean id="login" class="com.plant.action.LoginAction" scope="prototype">
<property name="plantbasicinfoManager">
<ref bean="manager" />
</property>
</bean>
</beans>在LoginAction里plantbasicinfoManager对象总为空
package com.plant.action; 
import java.util.HashMap;
import java.util.List;
import java.util.Map;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.plant.dto.TPlantbasicinfo;
import com.plant.service.IManager;public class LoginAction extends ActionSupport {
private IManager<TPlantbasicinfo> plantbasicinfoManager;
private List<TPlantbasicinfo> plantbasicinfoList;
public String login() {
String sqlStr = "from TPlantbasicinfo where 1=1";
plantbasicinfoList = plantbasicinfoManager.getList(sqlStr);

if (plantbasicinfoList.size() > 0) {
    return SUCCESS;
}else {
return "";
}
}
public IManager<TPlantbasicinfo> getPlantbasicinfoManager() {
return plantbasicinfoManager;
}
public void setPlantbasicinfoManager(
IManager<TPlantbasicinfo> plantbasicinfoManager) {
this.plantbasicinfoManager = plantbasicinfoManager;
}
public List<TPlantbasicinfo> getPlantbasicinfoList() {
return plantbasicinfoList;
}
public void setPlantbasicinfoList(List<TPlantbasicinfo> plantbasicinfoList) {
this.plantbasicinfoList = plantbasicinfoList;
}
}
还请个为大侠帮我看看是什么问题!

解决方案 »

  1.   

     我觉得你这样配置你的action还是没有托管给Spring.所以Spring才没办法帮你注入plantbasicinfoManager.
      

  2.   

    zz 这样配置你的action还是没有托管给Spring是什么意思
      

  3.   

    zz 你说的对了 我的struts.xml action 的class属性改成了applictionContext的bean id就行了 哈哈
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>
        <constant name="struts.objectFactory" value="spring" />
        
        <!--  <include file="struts-default.xml" />-->
        <!-- Add packages here -->
        <package name="plant_source" extends="struts-default">
        <action name="login" class="LoginAction" method="login">
    <result name="success">/index.jsp</result>
    </action>
    <action name="map" class="com.plant.action.MapAction" method="showMap">
    <result name="success">/map.html</result>
    </action>
    <action name="mapabc" class="com.plant.action.MapAction" method="showMap">
    <result name="success">/mapabc.html</result>
    </action>
    </package>
    </struts>
      

  4.   

    我把bean id 改成了LoginAction
      

  5.   

    将<bean id="manager" class="com.plant.service.impl.AbstractManager">
     <property name="dao"> <ref bean="hibernateDao" /></property>
     </bean>改为以下试试
    <bean id="manager" class="com.plant.service.impl.AbstractManager" parentXXX="hibernateDao"/>