Spring mvc 初级问题

userjiangeb 2013-03-18 05:45:55
刚学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方法,求教!
...全文
211 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
userjiangeb 2013-03-20
  • 打赏
  • 举报
回复
问题解决了,解决了。一开始觉得是service问题,后来仔细看,问题出在model这里,最后是这么写的

@Autowired
private TpermissionService tpermissionService;	

@RequestMapping("/padd") 
public void PermissionAdd(HttpServletRequest request, HttpServletResponse response){	
   Tpermission tpermission = new Tpermission(); 
谢谢大家了,给分,给分!
无敌小万万 2013-03-20
  • 打赏
  • 举报
回复
private TpermissionService tpermissionService; private Tpermission tpermission; 你先改成 private TpermissionService tpermissionService = new TpermissionService(); private Tpermission tpermission = new Tpermission(); 这样你就不会报错了,但是这样写就失去了使用Sring框架的意义了 你可以再配置文件上注入一下。
userjiangeb 2013-03-20
  • 打赏
  • 举报
回复
检索了下网页,根据别人说的注解注入方法,在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){		
userjiangeb 2013-03-19
  • 打赏
  • 举报
回复
这算注入了吗 import org.clas.model.Tpermission; import org.clas.service.TpermissionService private TpermissionService tpermissionService; private Tpermission tpermission; 另外,System.out.println两行都执行了的,表示已经能够接收到前台的参数
dracularking 2013-03-19
  • 打赏
  • 举报
回复
引用 9 楼 userjiangeb 的回复:
这算注入了吗 import org.clas.model.Tpermission; import org.clas.service.TpermissionService private TpermissionService tpermissionService; private Tpermission tpermission; 另外……
这只是表明AuthorityController类含有两个成员变量,不代表它们必须随主对象(enclosing object)初始化而初始化 也就是说当PermissionAdd方法被调用时,AuthorityController类是初始化了,但是其属性未必初始化(这里发生空指针异常表明未初始化,也就是未注入),因为它们不是constructor注入方式,而是setter注入方式,具体要看spring的配置了
zhaoli2315 2013-03-19
  • 打赏
  • 举报
回复
引用 9 楼 userjiangeb 的回复:
这算注入了吗 import org.clas.model.Tpermission; import org.clas.service.TpermissionService private TpermissionService tpermissionService; private Tpermission tpermission; 另外……
这当然不算咯,你要通过spring 去注入啊
少主无翼 2013-03-18
  • 打赏
  • 举报
回复
tpermission和tpermissionService 没注入调用的时候肯定是报空指针异常呀 把这两个参数注入进去就可以了 前台页面和参数都不用该
zhaoli2315 2013-03-18
  • 打赏
  • 举报
回复
tpermissionService有注入进来吗?是不是tpermissionService空了
tianma630 2013-03-18
  • 打赏
  • 举报
回复
没有注入tpermission和tpermissionService 报空指针了
zhaoli2315 2013-03-18
  • 打赏
  • 举报
回复
我不理解action="padd.html"是什么意思,是说页面提交请求直接跳转到padd.html页面吗?求大神解释
only_happiness 2013-03-18
  • 打赏
  • 举报
回复
System.out.println("aid==" + authid); System.out.println("aname==" + auname); 看看这些有没有执行到,多加几个输出 ,空指针的话 应该是没有取到值吧 看看输出有没有值
zhaoli2315 2013-03-18
  • 打赏
  • 举报
回复
我估计你的this是空的,用断点看看
  • 打赏
  • 举报
回复
页面改为 <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; }
zhaoli2315 2013-03-18
  • 打赏
  • 举报
回复
System.out.println("aid==" + authid); System.out.println("aname==" + auname);这些都有执行吗?异常贴全点,应该可以从异常中看到是哪行报错了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧