Spring MVC3构建Web应用第四步
现在我们开始设计控制器,鼠标右击src目录,选择新建-包,如下图:

并将包的名命名为paul.sydney.controller,在这个包中,新建立一个类,命名为PersonDisplay,将代码修改如下:
1
package paul.sydney.controller;
2
3
import org.springframework.beans.factory.annotation.Autowired;
4
import org.springframework.stereotype.Controller;
5
import org.springframework.ui.ModelMap;
6
import org.springframework.web.bind.annotation.RequestMapping;
7
import org.springframework.web.bind.annotation.RequestParam;
8
9
import paul.sydney.service.DummyService;
10
11
/**
12
* PersonDisplay class, display controller for the 'personDisplay.jsp'
13
* Copyright : adobocode.com , 2010
14
* @author Paul Sydney Orozco | xtrycatchx@gmail.com
15
*
16
*/
17
@Controller
18
public class PersonDisplay {
19
20
private final DummyService dummyService;
21
22
@Autowired
23
public PersonDisplay(DummyService dummyService) {
24
this.dummyService = dummyService;
25
}
26
27
@RequestMapping("/personDisplay.htm")
28
public ModelMap defaultHandler() {
29
return new ModelMap("personList", this.dummyService.getDummyList());
30
}
31
}
package paul.sydney.controller; 2
3
import org.springframework.beans.factory.annotation.Autowired; 4
import org.springframework.stereotype.Controller; 5
import org.springframework.ui.ModelMap; 6
import org.springframework.web.bind.annotation.RequestMapping; 7
import org.springframework.web.bind.annotation.RequestParam; 8
9
import paul.sydney.service.DummyService; 10
11
/** 12
* PersonDisplay class, display controller for the 'personDisplay.jsp' 13
* Copyright : adobocode.com , 2010 14
* @author Paul Sydney Orozco | xtrycatchx@gmail.com 15
* 16
*/17
@Controller18
public class PersonDisplay { 19
20
private final DummyService dummyService; 21
22
@Autowired23
public PersonDisplay(DummyService dummyService) { 24
this.dummyService = dummyService; 25
} 26
27
@RequestMapping("/personDisplay.htm") 28
public ModelMap defaultHandler() { 29
return new ModelMap("personList", this.dummyService.getDummyList()); 30
} 31
}
这里,使用注解@Controller表示这个是一个控制器,而 @RequestMapping("/personDisplay.htm")则表示对于personDisplay.htm这样的请求,使用defaultHandler这个方法去处理。而在defaultHandler中,又调用了逻辑服务层的
dummyService.getDummyList()方法获得人员列表,最后把列表存放到一个ModelMap中去(可以先理解为Map的一种数据结构)。
同样地,在paul.sydney.controller包中,新建一个类PersonForm,并将代码修改如下:
1
package paul.sydney.controller;
2
3
import org.springframework.beans.factory.annotation.Autowired;
4
import org.springframework.stereotype.Controller;
5
import org.springframework.ui.ModelMap;
6
import org.springframework.validation.BindingResult;
7
import org.springframework.web.bind.annotation.ModelAttribute;
8
import org.springframework.web.bind.annotation.RequestMapping;
9
import org.springframework.web.bind.annotation.RequestMethod;
10
import org.springframework.web.bind.annotation.RequestParam;
11
import org.springframework.web.bind.annotation.SessionAttributes;
12
import org.springframework.web.bind.support.SessionStatus;
13
14
import paul.sydney.model.Person;
15
import paul.sydney.service.DummyService;
16
@Controller
17
@RequestMapping("/personForm.htm")
18
@SessionAttributes("person")
19
public class PersonForm {
20
21
private final DummyService dummyService;
22
23
@Autowired
24
public PersonForm(DummyService dummyService) {
25
this.dummyService = dummyService;
26
}
27
28
@RequestMapping(method = RequestMethod.GET)
29
public String setupForm(@RequestParam("personId") int id, ModelMap model) {
30
Person person = this.dummyService.retrievePerson(id);
31
model.addAttribute("person", person);
32
return "personForm";
33
}
34
35
@RequestMapping(method = RequestMethod.POST)
36
public String processSubmit(@ModelAttribute("person") Person person, BindingResult result, SessionStatus status) {
37
this.dummyService.savePerson(person);
38
status.setComplete();
39
return "redirect:personDisplay.htm";
40
}
41
}
package paul.sydney.controller; 2
3
import org.springframework.beans.factory.annotation.Autowired; 4
import org.springframework.stereotype.Controller; 5
import org.springframework.ui.ModelMap; 6
import org.springframework.validation.BindingResult; 7
import org.springframework.web.bind.annotation.ModelAttribute; 8
import org.springframework.web.bind.annotation.RequestMapping; 9
import org.springframework.web.bind.annotation.RequestMethod; 10
import org.springframework.web.bind.annotation.RequestParam; 11
import org.springframework.web.bind.annotation.SessionAttributes; 12
import org.springframework.web.bind.support.SessionStatus; 13
14
import paul.sydney.model.Person; 15
import paul.sydney.service.DummyService; 16
@Controller17
@RequestMapping("/personForm.htm") 18
@SessionAttributes("person") 19
public class PersonForm { 20
21
private final DummyService dummyService; 22
23
@Autowired24
public PersonForm(DummyService dummyService) { 25
this.dummyService = dummyService; 26
} 27
28
@RequestMapping(method = RequestMethod.GET) 29
public String setupForm(@RequestParam("personId") int id, ModelMap model) { 30
Person person = this.dummyService.retrievePerson(id); 31
model.addAttribute("person", person); 32
return "personForm"; 33
} 34
35
@RequestMapping(method = RequestMethod.POST) 36
public String processSubmit(@ModelAttribute("person") Person person, BindingResult result, SessionStatus status) { 37
this.dummyService.savePerson(person); 38
status.setComplete(); 39
return "redirect:personDisplay.htm"; 40
} 41
}
这里,首先通过依赖注入,注入了服务层逻辑dummyService,然后在setupForm中,根据传入的参数personId,通过服务层逻辑dummyService找出这个人,然后将其保存到一个Model中去,返回给视图层personForm.jsp显示;而processSubmit是调用服务层逻辑保存用户的资料(通过this.dummyService.savePerson(person)实现),最后使用redirect跳转到personDisplay.htm。