刚学spring mvc ,想实现一个提交表单并保存到数据表的功能,
JSP代码<form method="POST" action="padd.html" >  
权限ID: <input id="aid" type="text" name="aid" />   
权限名称: <input id="aname" type="text" name="aname" />   
   <input type="submit" value="Submit" />  
</form>  
Controller 代码/**
 * 
 */
package org.clas.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.clas.model.Tpermission;
import org.clas.service.TpermissionService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;/**
 * @author jiangenbo
 *
 * 转移转化平台权限控制管理
 */@Controller
public class AuthorityController { /**
 * @author jiangenbo
 *
 * 添加权限信息
 */

private TpermissionService tpermissionService;
private Tpermission tpermission;

@RequestMapping("/padd") 
public void PermissionAdd(HttpServletRequest request, HttpServletResponse response){
String authid = request.getParameter("aid");
String auname = request.getParameter("aname");
System.out.println("aid==" + authid);
System.out.println("aname==" + auname);
tpermission.setAuthid(authid);
tpermission.setAuthname(auname);
tpermissionService.save(this.getTpermission());
//return 1;
} public TpermissionService getTpermissionService() {
return tpermissionService;
} public void setTpermissionService(TpermissionService tpermissionService) {
this.tpermissionService = tpermissionService;
} public Tpermission getTpermission() {
return tpermission;
} public void setTpermission(Tpermission tpermission) {
this.tpermission = tpermission;
}

}可以执行到system.out.println,也就是说可以接收到前端传来的数据,再往后执行就错了,下面是错误信息:
2013-3-18 17:44:52 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet dispatcher threw exception
java.lang.NullPointerException
at org.clas.controller.AuthorityController.PermissionAdd(AuthorityController.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
at org.clas.util.EncodingDispatcherServlet.doService(EncodingDispatcherServlet.java:25)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)

不知道什么意思,为什么没有指针。Modle都定义了set get方法,求教!

解决方案 »

  1.   

    页面改为
    <form method="POST" action="padd.html" >  
    权限ID: <input id="aid" type="text" name="tpermission.aid" />   
    权限名称: <input id="aname" type="text" name="tpermission.aname" />   
       <input type="submit" value="Submit" />  
    </form>  直接这样就行了。
     public void PermissionAdd(HttpServletRequest request, HttpServletResponse response){
            tpermissionService.save(this.getTpermission());
            //return 1;
        }
      

  2.   

    System.out.println("aid==" + authid);
    System.out.println("aname==" + auname);这些都有执行吗?异常贴全点,应该可以从异常中看到是哪行报错了
      

  3.   

    我估计你的this是空的,用断点看看
      

  4.   

       System.out.println("aid==" + authid);
       System.out.println("aname==" + auname); 
    看看这些有没有执行到,多加几个输出 ,空指针的话 应该是没有取到值吧 看看输出有没有值
      

  5.   

    我不理解action="padd.html"是什么意思,是说页面提交请求直接跳转到padd.html页面吗?求大神解释
      

  6.   

    没有注入tpermission和tpermissionService 报空指针了
      

  7.   

    tpermissionService有注入进来吗?是不是tpermissionService空了
      

  8.   

    tpermission和tpermissionService 没注入调用的时候肯定是报空指针异常呀
    把这两个参数注入进去就可以了  前台页面和参数都不用该
      

  9.   

    这算注入了吗
    import org.clas.model.Tpermission; 
    import org.clas.service.TpermissionServiceprivate TpermissionService tpermissionService;         
    private Tpermission tpermission; 另外,System.out.println两行都执行了的,表示已经能够接收到前台的参数
      

  10.   

    这当然不算咯,你要通过spring 去注入啊
      

  11.   

    这只是表明AuthorityController类含有两个成员变量,不代表它们必须随主对象(enclosing object)初始化而初始化也就是说当PermissionAdd方法被调用时,AuthorityController类是初始化了,但是其属性未必初始化(这里发生空指针异常表明未初始化,也就是未注入),因为它们不是constructor注入方式,而是setter注入方式,具体要看spring的配置了 
      

  12.   

    检索了下网页,根据别人说的注解注入方法,在service impl和contraller里加了相应注解,还是不对。
    错误提示还是没有指针。@Repository("tpermissionDao")
    public class TpermissionDaoImpl extends GenericDAOImpl<Tpermission, String> implements TpermissionDao {
    @Autowired
    private SessionFactory sessionFactory;@Service("tpermissionService")
    @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
    public class TpermissionServiceImpl extends GenericServiceImpl<Tpermission, String> implements TpermissionService { @Autowired
    private TpermissionDao tpermissionDao;

    public TpermissionDao gettPermissionDao() {
    return tpermissionDao;
    } public void settPermissionDao(TpermissionDao tpermissionDao) {
    this.tpermissionDao = tpermissionDao;
    super.setGenericDao(tpermissionDao);
    }
    @Autowired
    TpermissionService tpermissionService;
    Tpermission tpermission; 

    @RequestMapping("/padd") 
    public void PermissionAdd(HttpServletRequest request, HttpServletResponse response){
      

  13.   

        private TpermissionService tpermissionService;    
        private Tpermission tpermission;你先改成    private TpermissionService tpermissionService = new TpermissionService();    
        private Tpermission tpermission = new Tpermission(); 
    这样你就不会报错了,但是这样写就失去了使用Sring框架的意义了   你可以再配置文件上注入一下。
      

  14.   

    问题解决了,解决了。一开始觉得是service问题,后来仔细看,问题出在model这里,最后是这么写的
    @Autowired
    private TpermissionService tpermissionService; @RequestMapping("/padd") 
    public void PermissionAdd(HttpServletRequest request, HttpServletResponse response){
       Tpermission tpermission = new Tpermission(); 
    谢谢大家了,给分,给分!