0 0

SSH整合问题 NullPointerException20

SSH整合的一个小例子,struts2+Spring2+Hibernate3
代码如下:
Person.java
package com.eva.po;
/**
 * Person entity.
 * 
 * @author eva 
 */
import java.io.Serializable;

public class Person implements Serializable{
	
	private int id;
	private String name;
	private int age;
	private String sex;
	private String address;
	
	/** defult constructor */
	public Person() {
		
	}
	/** minimal constructor */
	public Person(String name) {
		this.name = name;
	}
	/** full constructor */
	public Person(String name,int age,String sex,String address) {
		this.name = name;
		this.age = age;
		this.sex = sex;
		this.address = address;
	}
         //setter and getter
}


PersonDAO.java
package com.eva.dao;

import java.util.List;

import com.eva.po.Person;

public interface PersonDAO {
	public void saveOrUpdate(Person person);
	public void update(Person person);
	public void delete(Person person);
	public Person get(String id);
	public List<Person> findAll();
}


PersonHibernateDAO.java
package com.eva.dao.hibernate;

import java.util.List;

import com.eva.dao.PersonDAO;
import com.eva.po.Person;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class PersonHibernateDAO extends HibernateDaoSupport implements
		PersonDAO {
	public void delete(Person person) {
		this.getHibernateTemplate().delete(person);
	}

	public List<Person> findAll() {
		List<Person> persons = this.getHibernateTemplate().find("from Person");
		return persons;
	}

	public Person get(String id) {
		Person person = (Person)this.getHibernateTemplate().get(Person.class, id);
		return person;
	}

	public void saveOrUpdate(Person person) {
		this.getHibernateTemplate().saveOrUpdate(person);
	}

	public void update(Person person) {
		this.getHibernateTemplate().saveOrUpdate(person);
	}

}


PersonService.java
package com.eva.service;

import java.util.List;

import com.eva.dao.hibernate.PersonHibernateDAO;
import com.eva.po.Person;

public class PersonService {
	private PersonHibernateDAO personHibernateDAO;
	
	public void setPersonHibernateDAO(PersonHibernateDAO personHibernateDAO) {
		this.personHibernateDAO = personHibernateDAO;
		System.out.println("personHibernateDAO is null ? --- " + personHibernateDAO == null);
	}
	
	public PersonHibernateDAO getPersonHibernateDAO() {
		return personHibernateDAO;
	}

	public void saveOrUpdate(Person person)
	{
		personHibernateDAO.saveOrUpdate(person);
	}

	public void update(Person person)
	{
		personHibernateDAO.update(person);
	}

	public void delete(Person person)
	{
		personHibernateDAO.delete(person);
	}

	public List<Person> findAll()
	{
		return personHibernateDAO.findAll();
	}

	public Person get(String id)
	{
		return personHibernateDAO.get(id);
	}
	
}



LoginAction.java
package com.eva.action;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.eva.po.Person;
import com.eva.service.PersonService;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
	private PersonService personService;
	private Person person;
	private String id;
	private List<Person> persons;

	public LoginAction() {
		
	}

	public Person getPerson() {
		return person;
	}

	public void setPerson(Person person) {
		this.person = person;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public PersonService getPersonService() {
		return personService;
	}

	public void setPersonService(PersonService personService) {
		this.personService = personService;
	}

	public List<Person> getPersons() {
		return persons;
	}

	public void setPersons(List<Person> persons) {
		this.persons = persons;
	}

	public String execute() throws Exception {
		if (person != null & !person.equals("")) {
			personService.saveOrUpdate(person);
		}
		persons = personService.findAll();
		setPersons(persons);

		System.out.println(persons.size());
		return SUCCESS;
	}

	public String list() throws Exception {
		persons = personService.findAll();
		setPersons(persons);
		return SUCCESS;
	}

	public String save() throws Exception {;
		personService.saveOrUpdate(person);
		return SUCCESS;
	}

	public String update() throws Exception {
		person = personService.get(id);
		personService.update(person);
		return SUCCESS;
	}

	public String getValue() throws Exception {
		return SUCCESS;
	}
	public String delete() throws Exception{
		person = personService.get(id);
		personService.delete(person);
		return SUCCESS;
	}

}


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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 

http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
	
	<!-- dataSource配置 -->
	<bean id="dataSource"  
        class="org.apache.commons.dbcp.BasicDataSource">  
        <property name="driverClassName">
            <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
        </property>
        <property name="url">
            <value>
                jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ssh 
            </value>
        </property>
        <property name="username">
            <value>sa</value>
        </property>
        <property name="password">
            <value>sa</value>
        </property>
    </bean> 
    <!-- 配置session工厂 -->

	<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>  
            </props>  
        </property>  
        <property name="mappingResources">  
            <list>  
                <value>com/eva/po/Person.hbm.xml</value></list>  
        </property> 
	</bean>
	
	<!-- 具体的数据库访问类 -->
	<bean id="dao" class="com.eva.dao.hibernate.PersonHibernateDAO">
		<property name="sessionFactory">
			<ref bean="sessionFactory"/>
		</property>
	</bean>
	<!-- 配置具体的业务逻辑类 -->
	<bean id="personService" class="com.eva.service.PersonService">
		<property name="personHibernateDAO">
			<ref bean="dao"/>
		</property>
	</bean>
	
	<!-- 配置action -->
	<bean id="loginAction" class="com.eva.action.LoginAction">
		<property name="personService">
			<ref bean="personService"/>
		</property>
	</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>
	<constant name="struts.i18n.encoding" value="UTF-8" />
	<!-- 一定要加,对象工厂是spring -->
	<constant name="struts.objectFactory" value="spring" />
	<!-- 开启开发模式 -->
	<constant name="struts.devMode" value="true" />

	<package name="login" extends="struts-default">
		<!-- 保存 -->
		<action name="Login" method="save" class="com.eva.action.LoginAction">
			<result>success.jsp</result>
			<!-- <result name="error">error.jsp</result> -->
		</action>
		<!-- 显示出所有列表 -->
		<action name="list" method="list" class="com.eva.action.LoginAction">
			<result>success.jsp</result>
		</action>
		<!-- 删除 -->
		<action name="delete" method="delete" class="com.eva.action.LoginAction">
			<result>success.jsp</result>
		</action>
		<!-- 更新 -->
		<action name="update" method="update" class="com.eva.action.LoginAction">
			<result>index.jsp</result>
		</action>
	</package>

</struts>


Person.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="org.s2s2h3.po.Person" table="person_" catalog="ssh2">
        <id name="id" type="java.lang.String">
            <column name="id" length="10" />
            <generator class="assigned" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="30" not-null="true" />
        </property>
        <property name="age" type="java.lang.String">
            <column name="age" length="10" />
        </property>
        <property name="sex" type="java.lang.String">
            <column name="sex" length="10" />
        </property>
        <property name="address" type="java.lang.String">
            <column name="address" length="50" />
        </property>
    </class>
</hibernate-mapping>


web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="person" version="2.4"
	xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>person</display-name>
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.FilterDispatcher
		</filter-class>
		<init-param>
			<param-name>classes</param-name>
			<param-value>java.lang.Object</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	
	<context-param> 
		<param-name>contextConfigLocation</param-name> 
		<param-value>/WEB-INF/applicationContext*.xml</param-value> 
	</context-param> 
	<!-- 添加监听器 -->
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>
</web-app>


index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">

		<title>My JSP 'index.jsp' starting page</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	</head>

	<body>
		<s:if test="null == person">
		Add Person
		</s:if>
		<s:else>
		Update Person
		</s:else>
		<s:form action="Login" method="post">
			<table>
				<caption>
					客户管理
				</caption>
				<tr>
					<td>
						<s:textfield name="person.id" label="ID" />
					</td>
				</tr>
				<tr>
					<td>
						<s:textfield name="person.name" label="NAME" />
					</td>
				</tr>
				<tr>
					<td>
						<s:textfield name="person.age" label="AGE" />
					</td>
				</tr>
				<tr>
					<td>
						<s:textfield name="person.sex" label="SEX" />
					</td>
				</tr>
				<tr>
					<td>
						<s:textfield name="person.address" label="ADDRESS" />
					</td>
				</tr>
				<tr>
					<td colspan="2">
						<s:submit value="submit" />
						<s:reset value="reset" />
					</td>
				</tr>
			</table>

		</s:form>
	</body>
</html>


添加数据之后点提交,会抛空指针错误,原因是LoginAction.java中的personService为空。。。
困惑,希望路过的各位兄弟帮忙看看。。谢过先~~

问题补充:
jjjssh 写道
在execute() 里面set 一个new personService看看,即
this.setPersonService(new PersonService());


我搞错了,是执行到PersonService的时候,personHibernateDAO为null。

问题补充:
jjjssh 写道
public void setPersonHibernateDAO(PersonHibernateDAO personHibernateDAO) {  
        this.personHibernateDAO = personHibernateDAO;  
        System.out.println("personHibernateDAO is null ? --- " + personHibernateDAO == null);  
    }  



有你这段代码。想不为null都不行啦

解决了,谢谢你~~是web.xml的问题
2010年7月07日 16:46

2个答案 按时间排序 按投票排序

0 0

采纳的答案

在execute() 里面set 一个new personService看看,即
this.setPersonService(new PersonService());

2010年7月07日 17:21
0 0

public void setPersonHibernateDAO(PersonHibernateDAO personHibernateDAO) {  
        this.personHibernateDAO = personHibernateDAO;  
        System.out.println("personHibernateDAO is null ? --- " + personHibernateDAO == null);  
    }  



有你这段代码。想不为null都不行啦

2010年7月08日 09:12

相关推荐

Global site tag (gtag.js) - Google Analytics