Structs引入bean时报空指针异常

天使小宝 2014-05-14 08:28:11
我现在搭建一个简单的SSH框架的实例,结果在Action中引入Bean的时候报空指针异常,希望有知道的回复下,万分感谢。



web.xml文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>SpringStructIBatis</display-name>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring/service/spring-service.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>
</servlet>

</web-app>


applicationContext.xml的内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc" 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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
">

<bean id="configproperties"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="classpath:jdbc.properties" />
</bean>

</beans>


struts.xml的内容:

<?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>

<package name="comprehensive" namespace="/rpt/test" extends="base">
<action name="test" class="com.comprehensive.action.TestAction" method="toTestAction" >
<result>/jsp/test.jsp</result>
</action>
</package>

</struts>


spring-service.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:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">

<bean name="testStudent" class="com.comprehensive.model.Student" />

<bean name="testAction" class="com.comprehensive.action.TestAction" >
<property name="student">
<ref bean="testStudent" />
</property>
</bean>

</beans>


Student.java的内容:

package com.comprehensive.model;

import java.io.Serializable;

public class Student implements Serializable{

private static final long serialVersionUID = 1L;

private int num;
private String name;
private String address;
private char sex;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}

public void print(){
System.out.println("========");
}
}



TestAction.java的内容:

package com.comprehensive.action;

import com.comprehensive.model.Student;
import com.opensymphony.xwork2.ActionSupport;

public class TestAction extends ActionSupport {

private static final long serialVersionUID = 1L;

private Student student;

public Student getStudent() {
return student;
}

public void setStudent(Student student) {
this.student = student;
}

public String toTestAction(){
System.out.println("=======ceshi=======");
//引入的时候会报错
student.print();
return SUCCESS;
}

}


...全文
147 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你action的方法写得也不对啊!

   public String toTestAction(){
        System.out.println("=======ceshi=======");
        //引入的时候会报错
        student.print();
        return SUCCESS;
    }
这里本来你的student都没有关联对象,只是声明了而已!声明就直接掉调用了他的方法了! 你改成这样试试

public String toTestAction(){
        System.out.println("=======ceshi=======");
       student = new Student();
        student.print();
        return SUCCESS;
    }
天使小宝 2014-05-14
  • 打赏
  • 举报
回复
引用 2 楼 longtian1213 的回复:
你没把action交个Spring容器! 在struts.xml中加上constant name="struts.objectFactory" value="spring" /> 然后<bean name="testAction" class="com.comprehensive.action.TestAction" >改成<bean name="testAction" class="testAction" >也就是你spring的bean的名称看看还会出错不!
今天谢谢你的帮助,都搞定了~
天使小宝 2014-05-14
  • 打赏
  • 举报
回复
引用 2 楼 longtian1213 的回复:
你没把action交个Spring容器! 在struts.xml中加上constant name="struts.objectFactory" value="spring" /> 然后<bean name="testAction" class="com.comprehensive.action.TestAction" >改成<bean name="testAction" class="testAction" >也就是你spring的bean的名称看看还会出错不!
按照你说的方法,我终于运行成功了,但是我改成注解的方式又报空指针异常了,你能帮我再看下吗? 我改的文件是:

package com.comprehensive.action;

import javax.annotation.Resource;

import com.comprehensive.model.Student;
import com.opensymphony.xwork2.ActionSupport;

public class TestAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	
	@Resource(name = "testStudent")
	private Student student;

	public String toTestAction(){
		System.out.println("=======ceshi=======");
		//引入的时候会报错
		student.print();
		return SUCCESS;
	}

}

@Resource(name = "testStudent") 这个没起到作用。
S117 2014-05-14
  • 打赏
  • 举报
回复
引用 3 楼 myjlvzlp 的回复:
[quote=引用 2 楼 longtian1213 的回复:] 你没把action交个Spring容器! 在struts.xml中加上constant name="struts.objectFactory" value="spring" /> 然后<bean name="testAction" class="com.comprehensive.action.TestAction" >改成<bean name="testAction" class="testAction" >也就是你spring的bean的名称看看还会出错不!
谢谢你的回复,我按照你的做法改成如下,还是报错噢,你能再帮忙看下吗?

<?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"/>
	 
	<package name="comprehensive" namespace="/rpt/test" extends="struts-default">  
		<action name="test" class="com.comprehensive.action.TestAction" method="toTestAction" >  
			<result>/jsp/test.jsp</result>  
		</action>  
	</package> 
 	 
</struts>

[/quote] class就不能在com.comprehensive.action.TestAction这么写了,要用spring的,把com.comprehensive.action.TestAction改成spring的bean名称
天使小宝 2014-05-14
  • 打赏
  • 举报
回复
引用 2 楼 longtian1213 的回复:
你没把action交个Spring容器! 在struts.xml中加上constant name="struts.objectFactory" value="spring" /> 然后<bean name="testAction" class="com.comprehensive.action.TestAction" >改成<bean name="testAction" class="testAction" >也就是你spring的bean的名称看看还会出错不!
谢谢你的回复,我按照你的做法改成如下,还是报错噢,你能再帮忙看下吗?

<?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"/>
	 
	<package name="comprehensive" namespace="/rpt/test" extends="struts-default">  
		<action name="test" class="com.comprehensive.action.TestAction" method="toTestAction" >  
			<result>/jsp/test.jsp</result>  
		</action>  
	</package> 
 	 
</struts>

S117 2014-05-14
  • 打赏
  • 举报
回复
你没把action交个Spring容器! 在struts.xml中加上constant name="struts.objectFactory" value="spring" /> 然后<bean name="testAction" class="com.comprehensive.action.TestAction" >改成<bean name="testAction" class="testAction" >也就是你spring的bean的名称看看还会出错不!
天使小宝 2014-05-14
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/myjlvzlp/7347583 这是我例子的代码,希望有知道的大神帮忙改下,万分感谢~

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧