用JSF+Hibernate+Spring编写一个新闻发布系统,结果在登录过程那一步就卡住了,在前台输入用户名密码后出现以下错误信息:
严重: java.lang.NullPointerException
javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:97)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
at javax.faces.component.UICommand.broadcast(UICommand.java:383)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at cr.kiwan.bean.Login.validate(Login.java:23)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:191)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
... 20 more
2012-5-26 3:01:08 com.sun.faces.lifecycle.InvokeApplicationPhase execute
警告: #{login.validate}: java.lang.NullPointerException
javax.faces.FacesException: #{login.validate}: java.lang.NullPointerException
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:107)
at javax.faces.component.UICommand.broadcast(UICommand.java:383)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:97)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
... 19 more我的login.java部分代码如下:
public class Login {
private String name;
private String pass;
private String nerror = "";
private String perror = "";
public static final String USER = "user";
private AdminDAO adminDao;
public String validate(){
String forward = "failure";
System.out.print("username="+name+";password="+pass);
List<Admin> checkedUser = adminDao.findByUsername(name); try{
if(checkedUser.isEmpty()||checkedUser.get(0).getUserpass()!=pass)
{
if(adminDao.findByUsername(name).isEmpty())
{
nerror = "用户名错误";
}
else{
perror = "密码错误";
}
}
else{
FacesContext fxt = FacesContext.getCurrentInstance();
Map session = fxt.getExternalContext().getSessionMap();
session.put(USER, checkedUser);
forward = "success";
}提示空指针异常出在红色那一行
findbyusername()方法如下:
public List<Admin> findByUsername(Object username) 
{
try {
         String queryString = "from Admin where username=" 
          +"'"+username+"'";
 return getHibernateTemplate().find(queryString);
      } catch (RuntimeException re) {
         log.error("find  username failed", re);
         throw re;
      }不知道为什么出现空指针异常,哪位大神给小弟指点下,做不下去了,非常急

}

解决方案 »

  1.   

    adminDao 是null,spring中,没有正确设置值
      

  2.   

    private AdminDAO adminDao; 
    dao申明后没有实例化所以为null;
    如果用的是spring的javabean管理的话需要给dao加上注解!
      

  3.   

    你要把dao的值注入进去,才不会为空。
      

  4.   

    @Autowired
    private AdminDAO adminDao;dao获取明显为空、请注入
      

  5.   

    这是我的spring配置文件内容,哪里需要改下,谢谢了<?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:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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/kiwan">
    </property>
    <property name="username" value="root"></property>
    <property name="password" value="123"></property>
    </bean>
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.MySQLDialect
    </prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
    </props>
    </property>
    <property name="annotatedClasses">
    <list>
    <value>cr.kiwan.entity.Admin</value>
    <value>cr.kiwan.entity.News</value>
    <value>cr.kiwan.entity.Ntype</value>
    <value>cr.kiwan.entity.Topic</value></list>
    </property></bean>
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
    <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <bean id="AdminDAO" class="cr.kiwan.service.AdminDAO">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>
    <bean id="NewsDAO" class="cr.kiwan.service.NewsDAO">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>
    <bean id="NtypeDAO" class="cr.kiwan.service.NtypeDAO">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>
    <bean id="TopicDAO" class="cr.kiwan.service.TopicDAO">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>
    <bean id="login" class="cr.kiwan.bean.Login">
    <property name="adminDao" ref="AdminDAO"></property>
    </bean>
    </beans>
      

  6.   

    刚开始学习的,对于spring配置文件怎么配还很迷糊,帮我看下我的配置文件哪里有问题,谢谢了
      

  7.   

    把org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean换一种加载方式
      

  8.   

    org.springframework.orm.hibernate3.LocalSessionFactoryBean
      

  9.   

    <bean id="yourSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="yourDataSource"/>
      

  10.   

    我的实体类是用的@entity注解的,没编写hbm映射文件,改为localsessionfactory的话,我需要再写一遍映射文件