spring MVC要注意的地方:
控制器代码如下:
package com.mvc.jn.controller; import java.util.Map; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; @org.springframework.stereotype.Controller public class HelloWorldController { // http://localhost:8088/springMVCannotations/hello2 @RequestMapping(value = "/hello2", method = RequestMethod.GET) public String sayHello2( @RequestParam(value = "name", required = false) String username, Mapmap) { map.put("message1", username); System.out.println("my name:" + username); return "hello22"; } // http://localhost:8088/springMVCannotations/hello3 @RequestMapping(value = "/hello3", method = RequestMethod.GET) public ModelAndView sayHello3( @RequestParam(value = "name", required = false) String username) { System.out.println("my name:" + username); ModelAndView mav = new ModelAndView("hello33"); mav.getModel().put("message1", username); return mav; } // http://localhost:8088/springMVCannotations/hello44?name=whuang @RequestMapping(value = "/hello44", method = RequestMethod.GET) // 与网上说的不一致,网上说方法名就是试图 public Model hello4( @RequestParam(value = "name", required = false) String username, Model model) { System.out.println("my name:" + username); model.addAttribute("message1", username); return model; } @RequestMapping(value = "/hello555", method = RequestMethod.GET) public Model hello5(String username, Model model) { System.out.println("my name:" + username); model.addAttribute("message1", username); return model; } }
ViewResolver配置如下:
问题1:调用控制器中的hello4 方法后会返回那个视图?
按照网上的说法,会返回“hello4”(方法名),如下图
但是经过我反复测试,发现它返回的视图是“hello44”,即@RequestMapping 指定的value。
问题2:访问方法hello5时,必须传参数username 吗?
答:不是必须的。
什么情况下是必须的呢?
当有注解@RequestParam(value = "username")时才是必须的,若不传该参数将报错.
url 是“http://localhost:8088/springMVCannotations/hello555?username=ccc”时,会自动设置username的值
问题3:spring MVC与hibernate4集成时报错:No Session found for current thread
详情请参阅我的另一篇博客:http://hw1287789687.iteye.com/blog/1949852
问题4:启动tomcat时报错:java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
原因是:pom.xml中缺少:
org.springframework spring-web 3.2.3.RELEASE org.springframework spring-webmvc 3.2.3.RELEASE
问题5:spring MVC 使用bean接收参数时如何传参?
比如查询时,controller 把参数注入到bean中,
@RequestMapping(value = "/show") public String show(Model model,User user,UserView view,HttpSession session) throws CloneNotSupportedException { if(!ValueWidget.isNullOrEmpty(view.getPageFlag())&&view.getPageFlag().equals(Constant2.PAGEFLAG_NOT_QUERY)){ System.out.println("不是查询"); user=(User)session.getAttribute("user2"); try { BeanUtils.copyProperties(view, user); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } }else{//查询 System.out.println("是查询"); session.setAttribute("user2", user); } PageAssistant.paging(user,true,view, userDao); model.addAttribute("view", view); model.addAttribute("currentTime", TimeHWUtil.getCurrentTimestamp().getTime()); return "user/show"; }
方法show()的参数user会保存请求要素,那么在页面上是如何编写表单控件name的呢?
上述代码是不对的,应该是:
username" value="${view.username }" />
name" value="${view.name }" />
注意:spring MVC 的依赖注入与struts2 是不同的.
spring MVC 的学习资料见附件spring MVC学习笔记.zip
Controller 中Action 参数
, User user, 和
, @RequestParam(required = false) User user,
是有区别的.
如果包含@RequestParam ,则无法自动注入对象的成员变量