本人郁闷啊,难道UserService没有注入到Action中啊??求高人解答
java.lang.NullPointerException
com.portal.user.web.UserAction.login(UserAction.java:44)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)UserAction代码:
package com.portal.user.web;import java.util.Map;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.portal.user.model.User;
import com.portal.user.service.IUserService;//通过实现ModelDriven来获取表单的内容
public class UserAction extends ActionSupport implements ModelDriven<User>{
private static final Logger log =
(Logger) LoggerFactory.getLogger(UserAction.class);
private IUserService userService;
private User model = new User();
//private String username;
//private String password;
//private String email;
@Override
public User getModel() {
// TODO Auto-generated method stub
return model;
}
//依赖注入业务逻辑组件
public void setUserService(IUserService userService) {
this.userService = userService;
}
/*
* 处理用户登录
* */
public String login(){
log.debug("user login!");
Map session = ActionContext.getContext().getSession();
//获取用户请求的表单的值
try{
//查找是否有该用户
int va = userService.login(model.getUserName(), model.getPassWord());
//如果没有,返回错误界面
if(va!=-1){
//把用户名放入session对象
session.put("username", model.getUserName());
userService.addUser(model);
return SUCCESS;
}
}catch(RuntimeException e){
log.error("login failed", e);
throw e;
}
return LOGIN;
}
/**
* 用户注册
* */
public String register()throws Exception{
log.debug("User register!");
int emailnum=1;
//try{
//查找用户名是否已经存在
int va = userService.findUserByName(model.getUserName());
if(va!=-1){
//邮箱是否注册过了
emailnum = userService.findByEmail(model.getEmail());
if(emailnum!=-1){
userService.addUser(model);
return SUCCESS;
}
}
return INPUT;
}
}
application中的配置:
<bean id="UserDAO" class="com.portal.user.dao.UserDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"></ref>
</property>
</bean>
<!-- 部署业务逻辑组件,并把它所依赖的DAO组件注入到业务逻辑组件中 -->
<bean id="UserService" class="com.portal.user.service.UserService">
<property name="userDAO" ref="UserDAO"></property>
</bean>
<!-- 把业务逻辑组件注入到Action中 -->
<bean id="UserAction" class="com.portal.user.web.UserAction">
<property name="userService" ref="UserService"></property>
</bean>本人根据异常的断点来看
44行的 int va = userService.login(model.getUserName(), model.getPassWord());这句 userService的值是null,是不是这个原因呢? 他应该注入到action中了的,奇怪了。
java.lang.NullPointerException
com.portal.user.web.UserAction.login(UserAction.java:44)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)UserAction代码:
package com.portal.user.web;import java.util.Map;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.portal.user.model.User;
import com.portal.user.service.IUserService;//通过实现ModelDriven来获取表单的内容
public class UserAction extends ActionSupport implements ModelDriven<User>{
private static final Logger log =
(Logger) LoggerFactory.getLogger(UserAction.class);
private IUserService userService;
private User model = new User();
//private String username;
//private String password;
//private String email;
@Override
public User getModel() {
// TODO Auto-generated method stub
return model;
}
//依赖注入业务逻辑组件
public void setUserService(IUserService userService) {
this.userService = userService;
}
/*
* 处理用户登录
* */
public String login(){
log.debug("user login!");
Map session = ActionContext.getContext().getSession();
//获取用户请求的表单的值
try{
//查找是否有该用户
int va = userService.login(model.getUserName(), model.getPassWord());
//如果没有,返回错误界面
if(va!=-1){
//把用户名放入session对象
session.put("username", model.getUserName());
userService.addUser(model);
return SUCCESS;
}
}catch(RuntimeException e){
log.error("login failed", e);
throw e;
}
return LOGIN;
}
/**
* 用户注册
* */
public String register()throws Exception{
log.debug("User register!");
int emailnum=1;
//try{
//查找用户名是否已经存在
int va = userService.findUserByName(model.getUserName());
if(va!=-1){
//邮箱是否注册过了
emailnum = userService.findByEmail(model.getEmail());
if(emailnum!=-1){
userService.addUser(model);
return SUCCESS;
}
}
return INPUT;
}
}
application中的配置:
<bean id="UserDAO" class="com.portal.user.dao.UserDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"></ref>
</property>
</bean>
<!-- 部署业务逻辑组件,并把它所依赖的DAO组件注入到业务逻辑组件中 -->
<bean id="UserService" class="com.portal.user.service.UserService">
<property name="userDAO" ref="UserDAO"></property>
</bean>
<!-- 把业务逻辑组件注入到Action中 -->
<bean id="UserAction" class="com.portal.user.web.UserAction">
<property name="userService" ref="UserService"></property>
</bean>本人根据异常的断点来看
44行的 int va = userService.login(model.getUserName(), model.getPassWord());这句 userService的值是null,是不是这个原因呢? 他应该注入到action中了的,奇怪了。
错误的信息是:
HTTP Status 500 -type Exception reportmessagedescription The server encountered an internal error () that prevented it from fulfilling this request.exceptionjava.lang.NullPointerException
com.portal.user.web.UserAction.login(UserAction.java:47)
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:452)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.30 logs.Apache Tomcat/6.0.30
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-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/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"></property>
<property name="username" value="root"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"></ref>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/portal/user/model/User.hbm.xml</value></list>
</property></bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 哪些类的方法参与事物 -->
<!-- 配置一个切入点,匹配com.portal.*.service包下
所有的类的所有方法的执行 -->
<aop:config>
<aop:pointcut id="allServiceMethod" expression="execution(* com.portal.*.service.*.*(..))" />
<aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice" />
</aop:config>
<!--项目的开发 -->
<!-- 用户Bean的-->
<bean id="UserDAO" class="com.portal.user.dao.UserDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"></ref>
</property>
</bean>
<!-- 部署业务逻辑组件,并把它所依赖的DAO组件注入到业务逻辑组件中 -->
<bean id="UserService" class="com.portal.user.service.UserService">
<property name="userDAO" ref="UserDAO"></property>
</bean>
<!-- 把业务逻辑组件注入到Action中 -->
<bean id="UserAction" class="com.portal.user.web.UserAction">
<property name="userService" ref="UserService"></property>
</bean>
</beans>
你调试一下,看dao是不是空的
测试类:
package com.portal.user.service;import static org.junit.Assert.*;import java.util.List;import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.portal.user.dao.UserDAO;
import com.portal.user.model.User;public class DAOTest {
public static BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext-*.xml");
@Test
public void testSave() {
//不用spring注入的话就自己new一个dao出来
UserDAO dao1 = (UserDAO)factory.getBean("UserDAO");
List<User> list = dao1.findAll();
User user = list.get(0);
System.out.print(user.getUserName());
}}JUNIT的失败信息怎么就没有UserDAO呢,配置我没写错啊,求解啊,大哥们org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'UserDAO' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:509)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1041)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:273)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1044)
at com.portal.user.service.DAOTest.testSave(DAOTest.java:94)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.portal.user.dao.UserDAO;
import com.portal.user.model.User;public class DAOTest {
public static BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
@Test
public void testSave() {
//不用spring注入的话就自己new一个dao出来
UserDAO dao1 = (UserDAO)factory.getBean("UserDAO");
List<User> list = dao1.findAll();
User user = list.get(0);
System.out.println(user.getUserName());
System.out.println(user.getEmail());
//dao1.get(xx);dao1.update(xx);dao1.delete(xx); - c、r、u、d操作
}}输出:
123456
23456
说明DAO注入到了service中,没有问题。测试UserAction,是否UserService注入到了Action中package com.portal.user.web;import static org.junit.Assert.*;import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.portal.user.service.UserService;public class ServiceTest { @Test
public void testGetModel() {
fail("Not yet implemented");
}
public static BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
@Test
public void testTest() {
//不用spring注入的话就自己new一个dao出来
UserService us = (UserService)factory.getBean("UserService");
us.Test();
}
}但是有错误啊,java.lang.ClassCastException: $Proxy4 cannot be cast to com.portal.user.service.UserService
at com.portal.user.web.ServiceTest.testTest(ServiceTest.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
这是怎么回事啊,我检查了我bean配置,应该没有问题的啊。
public static BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext-*.xml");这个applicationContext-*.xml和下文中的applicationContext.xml不同,是不是有问题呢?没有UserDAO应该就是因为文件名称错误导致的@9楼
这个问题确实有点儿奇怪,UserService的类型就是com.portal.user.service.UserService
,难道有多个id为UserService的bean,应该也不大可能
讨论:最近几天也遇到类似的一个问题,但是不太一样,JUnit测试Service中可以注入DAO,Action中可以注入Service,可是部署成Web项目之后,访问Action就提示Service异常NullPointException,怎么个情况呢?Spring.xml<!-- DAO -->
<bean id="demoDao" class="org.xianfeng.hibernate.dao.HibernateDaoImpl">
<constructor-arg>
<value>org.xianfeng.ssh.demo.entity.DemoEntity</value>
</constructor-arg>
<property name="dataSource" ref="dataSource" />
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- Service -->
<bean name="demoService" class="org.xianfeng.ssh.demo.service.DemoService" scope="prototype">
<property name="demoDao" ref="demoDao"/>
</bean>
<!-- Action -->
<bean name="demoAction" class="org.xianfeng.ssh.demo.action.DemoAction" scope="prototype">
<property name="demoService" ref="demoService"/>
</bean> Struts.xml<package name="demo" namespace="/demo" extends="struts-default">
<action name="Demo" class="org.xianfeng.ssh.demo.action.DemoAction" method="execute">
<result name="success">success.jsp</result>
<result name="failed">failed.jsp</result>
</action>
</package>Struts2.2.3.1.GA+Spring3.0.6.RELEASE+Hibernate3.3.2.GA
路过的朋友,帮忙看看,纠结好几天了,jar包什么的应该没有太大问题
struts2-spring-plugin-2.2.3.1.jar也有
这句是什么意思???
例如在applicationContext中:
<bean id="LoginAction" class="com.portal.user.action.LoginAction" scope="prototype">
<property name="userService" ref="UserService"></property>
</bean>
<bean id="RegisterAction" class="com.portal.user.action.RegisterAction" scope="prototype">
<property name="userService" ref="UserService"></property>
</bean>
那么struts中action配置成:
<action name="login" class="LoginAction" method="userLogin">
<result name="success">/success.jsp</result>
<result name="input">/login.jsp</result>
</action>
<action name="register" class="RegisterAction" method="regist">
<result name="success">/success.jsp</result>
<result name="input">/register.jsp</result>
</action>
也就是说struts中class的路径应是applicationContext中bean的id;
我当时是没有配好,所以出现那个问题。
希望对你有帮助