2014-11-05 4 views
0

저는 봄과 겨울잠을하기가 처음입니다. 프로젝트를 만들었지 만 여기에 그 기능이 있습니다. 응용 프로그램에는 submit을 누른 후 Controller 클래스로 리디렉션되는 JSP의 양식 요소가 있습니다. 컨트롤러는 DAO를 호출하고 마지막으로 레코드를 데이터베이스에 추가하는 서비스 계층을 호출합니다. 내가 겪고있는 문제는 컨트롤러 클래스에서 요청 매개 변수 (POST)를받을 수 있지만 서비스 레이어의 addMember()를 호출하는 동안 문제가 있다는 것입니다. 문제는 개체에 대한 Null 포인터 예외입니다. 여러분은 코드를 검토하고 제안을 해주실 수 있습니까? 여기 요청 처리가 실패했습니다. 중첩 예외는 java.lang.NullPointerException입니다. 최대 절전 모드 통합

여기 내 컨트롤러 클래스 인 LoginController

package com.online.site.member; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Qualifier; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.validation.BindingResult; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

import com.online.site.Member.Member; 
import com.online.site.Member.MemberBoImpl; 

@Controller 
@RequestMapping("/Login.htm") 
public class LoginController { 
@Autowired 
//@Qualifier(value="memberServiceImp") 
private MemberBoImpl memberServiceImpl; 


    public void setMemberServiceImp(MemberBoImpl memberServiceImpl) { 
    this.memberServiceImpl = memberServiceImpl; 
    System.out.println(memberServiceImpl.toString()); 
} 

    @RequestMapping(method=RequestMethod.POST) 
    public String executeLogin(@ModelAttribute("Login") Member member, BindingResult result) 
    { 
     /* call member record fetch method from service layer. 
     * if login successful redirect to home page. If not a member 
     * call create member method from service layer and redirect to create account page*/ 
     memberServiceImpl.addMember(member); 
     //memberServiceImp.getMemberDetails(member.getMemberId()); 
     return "CreateMemberProfile"; 
    } 

    @RequestMapping(method=RequestMethod.GET) 
    public String initializeMemberLoginForm(ModelMap model) 
    { 
     Member member = new Member(); 
     model.addAttribute("Login", member); 
     return "Login"; 


    } 
} 

입니다 여기에

@Service 
public class MemberBoImpl implements MemberInterface{ 
//@Autowired 
    private MemberDaoImpl memberDaoImpl; 
/*private HibernateTemplate hibernateTemplate; 

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { 
     this.hibernateTemplate = hibernateTemplate;}*/ 

    public void setMemberDaoImpl(MemberDaoImpl memberDaoImpl) { 
     this.memberDaoImpl = memberDaoImpl; 
     System.out.println("in doa setter"); 
    } 

    public boolean addMember(Member member) { 
     //hibernateTemplate.save(member); 
     System.out.println("in bo impl"+member.getMemberId()); 
     System.out.println(memberDaoImpl.toString()); 
     memberDaoImpl.addMember(member); 
     return false; 
    } 
} 

는 DAO 클래스를있는 서비스 클래스에게 있습니다

여기
package com.online.site.Member; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.orm.hibernate3.HibernateTemplate; 

public class MemberDaoImpl implements MemberInterface{ 
@Autowired 
    private HibernateTemplate hibernateTemplate; 

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { 
     this.hibernateTemplate = hibernateTemplate; 
     System.out.println("in hibernate setter");} 

    public boolean addMember(Member member) { 
     System.out.println("dao impl"); 
     hibernateTemplate.save(member); 
     return false; 
    } 


} 

은 config.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:context="http://www.springframework.org/schema/context" 
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd 
     http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd 
     http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.2.xsd"> 

    <context:annotation-config/> 

<!-- <context:component-scan base-package="com.online.site"></context:component-scan> --> 

    <bean id="memberServiceImpl" class="com.online.site.Member.MemberBoImpl" 
     scope="singleton" autowire="byType"> 
    <property name="memberDaoImpl" ref="memberDaoImpl"></property> 
<!-- <property name="hibernateTemplate" ref="hibernateTemplate"></property>--> 
    </bean> 

    <bean id="member" class="com.online.site.Member.Member"/> 

    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> 
     <property name="url" value="jdbc:mysql://localhost:3306/onlineshopssite"></property> 
     <property name="username" value="root"></property> 
     <property name="password" value="admin"></property> 
    </bean> 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 

     <property name="dataSource" ref="dataSource"></property> 

     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
      </props> 
     </property> 

     <property name="annotatedClasses"> 
      <list> 
       <value>com.online.site.Member.Member</value> 
      </list> 
     </property> 
    </bean> 

    <bean name="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> 
    <property name="sessionFactory" ref="sessionFactory"></property> 
    </bean> 

     <bean id="memberDaoImpl" class="com.online.site.Member.MemberDaoImpl" autowire="byType"> 
    <property name="hibernateTemplate" ref="hibernateTemplate"></property> 
    </bean> 
</beans> 
01 여기 23,516,

나는 다양한 포럼하지만 아무것도에 많은 제안을 시도했습니다 디스패처-servlet.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:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context.xsd"> 

    <import resource="classpath*:/onlineShop-config.xml" /> 


    <!-- step eight: http://localhost:8080/Spring3MVCDemo/customer.htm --> 
<context:component-scan base-package="com.online.site,com.online.site.Billing,com.online.site.Member"></context:component-scan> 


    <!-- step 12 public String initializeCustomerForm(ModelMap model) { returning 
     string value return "createCustomer" createCustomer prefix and suffix will 
     be added by the InternalResourceViewResolver http://localhost:8080/Spring3MVCDemo/createCustomer.jsp --> 
    <bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 

     <property name="prefix" value="/" /> 
     <property name="suffix" value=".jsp" /> 

    </bean> 

</beans> 

일부 basci 단계 누락 가능성이 높다 일하러 보인다. 누구든지 내 코드를보고 제안 할 수 있습니까?

+0

또한 필드 주입을 사용한다면, 비즈니스 로직에서 'HibernateTemplate'을 변경하지 않는 한 세터가 필요 없다. , 가능성은 희박합니다). – Floegipoky

답변

1

당신의 hibernateTemplate이 주입되지 않는다. Spring은 MemberDaoImpl 클래스에 아무 것도 할 필요가 없다는 것을 모른다. @Controller를 사용한 것처럼 @Component 또는 @Repository로 주석을 달아야합니다. 지금 가지고 계시 겠지만, autowiring과 관련된 목표는 아닙니다.

+0

클래스에 @Service로 주석이 지정되어 있습니다. 그리고 그 수업에서 저는 MemberDAOImpl이라고 부릅니다.MemberDAOImpl에 구성 요소를 추가하려고했지만 동일한 오류가 발생합니다. applicationcontext를 작성하여 일반 Java 클래스에서 서비스 클래스를 호출하면 올바르게 작동합니다. – User123

+0

이것을 읽으십시오. http://stackoverflow.com/questions/7414794/difference-between-contextannotation-config-vs-contextcomponent-scan – zmf

0

서비스 및 저장소는 주석해야 XML

먼저을 통해 선언 피하기 :에

public class MemberDaoImpl implements MemberInterface{ 

에서

@Repository 
public class MemberDaoImpl implements MemberInterface{ 

당신은 저장소에 직접 SessionFactory

셋째, 최대 절전 모드를 사용할 수 있습니다, 더 이상 추천 사용 HibernateTemplate 아닌가

당신은 당신이 @Service 및 @Transactional와 @Repository, 최대 절전 모드 물어 것입니다 때문에 주석을해야한다 트랜잭션 지원. 더 나아가 여러분의 컨피규레이션에 추가로 빈을 정의 할 필요가있다. transactionManager

관련 문제