Spring mvc 初级问题
刚学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方法,求教!
[解决办法]
页面改为
<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;
}
[解决办法]
没有注入tpermission和tpermissionService 报空指针了
[解决办法]
tpermission和tpermissionService 没注入调用的时候肯定是报空指针异常呀
把这两个参数注入进去就可以了 前台页面和参数都不用该
[解决办法]
这只是表明AuthorityController类含有两个成员变量,不代表它们必须随主对象(enclosing object)初始化而初始化
也就是说当PermissionAdd方法被调用时,AuthorityController类是初始化了,但是其属性未必初始化(这里发生空指针异常表明未初始化,也就是未注入),因为它们不是constructor注入方式,而是setter注入方式,具体要看spring的配置了
[解决办法]
private TpermissionService tpermissionService;
private Tpermission tpermission;
你先改成 private TpermissionService tpermissionService = new TpermissionService();
private Tpermission tpermission = new Tpermission();
这样你就不会报错了,但是这样写就失去了使用Sring框架的意义了 你可以再配置文件上注入一下。