在注册页面输入数据后点注册,然后提示空指针异常。
注册页面代码:<%@ page contentType="text/html;charset=gbk" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>My JSP 'regist.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 style="background-color: green;">
    <div style="margin-top: 100px" align="center">
     <h1>普通用户注册</h1>
     <hr style="color: black;">
     <br>
        <s:form action="regist" method="POST">
            <s:textfield name="uName" id="uName" label="用户名"></s:textfield>
            <br>
            <s:password name="uKey"  label="密码" size="21"></s:password>
            <br>
            <s:submit  value="注册"/>
        </s:form>
    </div>
  </body>
</html>
注册对应的action:
package com.one.action;
import com.one.bean.UserEntity;
import com.one.service.UserService;
import com.opensymphony.xwork2.ActionSupport;public class registAction extends ActionSupport {

private UserEntity user;
    private String uName;
    private String uKey;    public String getuName() {
        return uName;
    }    public void setuName(String uName) {
        this.uName =uName;
    }    public String getuKey() {
        return uKey;
    }    public void setuKey(String uKey) {
        this.uKey = uKey;
    }    public void setUserService(UserService userService) {
        this.userService = userService;
    }    private UserService userService;    public UserEntity getUserEntity() {
        return user;
    }    public void setUserEntity(UserEntity user) {
        this.user= user;
    }
@Override
    public String execute(){
        if (!getuName().equals("")&&!getuKey().equals("")) {              if (userService.save(uName,uKey).equals("success")){
                  addActionMessage("注册成功!!!");
                  return SUCCESS;
              }
            else {
                  addActionError("注册失败!!!");
              }
        }
        else {
            addActionError("请输入用户名和密码");
        }        return null;
    }
}
提示信息:
type Exception reportmessage description The server encountered an internal error that prevented it from fulfilling this request.exception 
java.lang.NullPointerException
com.one.action.registAction.execute(registAction.java:47)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:601)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
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:246)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:161)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)note The full stack trace of the root cause is available in the Apache Tomcat/7.0.34 logs.action的地47行是:
if (!getuName().equals("")&&!getuKey().equals(""))我才接触ssh不久,这是参照别人的代码写的,求大神解答!!!
SSHJSP

解决方案 »

  1.   

    页面参数没有成功注入,检查spring配置文件
      

  2.   


    这是我的struts配置文件struts.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
            "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <package name="abc" extends="struts-default">
            <action name="regist" class="Regist">
               <result name="success">r_success.jsp</result>
                <result name="error">r_error.jsp</result>
            </action>
        </package>
    </struts>
    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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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/message"></property>
            <property name="username" value="root"></property>
            <property name="password" value="m910309ame"/>
        </bean>
        <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                    <prop key="hibernate.show_sql">true</prop>
                </props>
            </property>
            <property name="mappingResources">
                <list>
                    <value>/com/one/bean/UserEntity.hbm.xml</value>
                    <value>/com/one/bean/ManagerEntity.hbm.xml</value>
                    <value>/com/one/bean/UGongzuojingliEntity.hbm.xml</value>
                    <value>/com/one/bean/UserAihaoEntity.hbm.xml</value>
                    <value>/com/one/bean/UserBasemessageEntity.hbm.xml</value>
                    <value>/com/one/bean/UserFamilyEntity.hbm.xml</value>
                </list>
            </property>
        </bean>
        <bean id="userDao" class="com.one.Dao.impl.UserDAOimpl">
            <property name="sessionFactory" ref="sessionFactory"></property>
        </bean>
        <bean id="userService" class="com.one.service.impl.UserServiceimpl">
            <property name="userDao" ref="userDao"/>
        </bean>
        <bean id="Regist" scope="prototype" class="com.one.action.registAction">
            <property name="userService" ref="userService"></property>
        </bean>
    </beans>
    真不知道哪里错了,求帮忙。
      

  3.   

    你把getuName()和uName用system.out.print();都打印出来看看你就懂了
      

  4.   

    你拷贝一个log4j文件到src目录下看看详细错误信息
      

  5.   

    <s:form action="regist.action" method="POST">这里要加.action吧
      

  6.   

    <s:form action="regist.action" method="POST">
      

  7.   

    报空指针说明你请求肯定到后台了。但是值没有注入,你可以查一下,你的前台的name是否和后台的name一致。还要查一下后台是否写了setter和getter方法或是是否实现了modelDriven接口。如果实现的是modelDriven要在你的action中new一个那个对象才行
      

  8.   

    你action中get/set方法名字木有匹配,不是工具自动生成的吧?uName对应的是getUName/setUName,所以spring才没有找到对应的set方法,没有注入成功。
    改下uName和uKey对应get/set方法名试下吧(u改成大写的U)
      

  9.   

    是否写了setter和getter方法或是是否实现了modelDriven接口
      

  10.   

    你的userService没有注入,也就是说没有实例化,用spring的话是不是应该咋private UserService userService;上面加上@Resource?
      

  11.   

    这个get和set方法确实是工具生成的,我用的是idea 12自动生成的就是那样,myeclipse也是那样,我试验了下好像第二个字母大写的话set和get方法的第一个字母就不会大写,第二个字母往后再大写就没关系了。
      

  12.   

    这种问题,最好是设置断点,然后逐个击破,配置文件应该没有什么问题的,因为你的action已经执行了,可能就是action中程序的问题,打个断点一步步看看呗