Tôi khá mới trong Spring MVC. Hiện tại tôi đang nghiên cứu Spring MVC Showcase, thể hiện các tính năng của khung công tác web MVC Spring.Hiểu việc sử dụng các chú thích @ModelAttribute và @RequestAttribute trong Spring MVC
Tôi có một số vấn đề để hiểu cách đối số Web có thể giải quyết tùy chỉnh được xử lý trong ví dụ này.
Trong thực tế, tôi có tình huống sau. Trong home.jsp quan điểm của tôi tôi có đường dẫn sau:
<a id="customArg" class="textLink" href="<c:url value="/data/custom" />">Custom</a>
Liên kết này tạo ra một yêu cầu HTTP về phía URL: "/ data/tùy chỉnh"
Lớp điều khiển có chứa phương pháp để xử lý yêu cầu này có đoạn mã sau:
@Controller
public class CustomArgumentController {
@ModelAttribute
void beforeInvokingHandlerMethod(HttpServletRequest request) {
request.setAttribute("foo", "bar");
}
@RequestMapping(value="/data/custom", method=RequestMethod.GET)
public @ResponseBody String custom(@RequestAttribute("foo") String foo) {
return "Got 'foo' request attribute value '" + foo + "'";
}
}
phương pháp xử lý HTTP Request đây là tùy chỉnh(). Vì vậy, khi liên kết trước được nhấp vào, Yêu cầu HTTP được xử lý theo phương thức tùy chỉnh.
Tôi có một số vấn đề để hiểu chính xác chú thích @RequestAttribute là gì. Tôi nghĩ rằng, trong trường hợp này, nó liên kết thuộc tính yêu cầu có tên là foo với biến String foo mới. Nhưng nơi mà thuộc tính này được lấy từ đâu? Biến này có được thực hiện bởi Spring không?
OK, ý tưởng của tôi là thuộc tính yêu cầu này được lấy từ một đối tượng HttpServletRequest. Tôi nghĩ vì vậy, trong lớp này, tôi cũng có phương thức beforeInvokingHandlerMethod() có tên nói, vì vậy có vẻ như phương pháp này đặt thuộc tính, có name = foo và giá trị = bar, bên trong một đối tượng HttpServletRequest, và sau đó phương thức custom() có thể sử dụng giá trị này.
Trong thực tế sản lượng của tôi là:
Got 'foo' yêu cầu thuộc tính giá trị 'bar'
Tại sao beforeInvokingHandlerMethod() được gọi trước khi tùy chỉnh() phương pháp?
Và tại sao beforeInvokingHandlerMethod() được chú thích bởi @ModelAttribute chú thích? Nó có ý nghĩa gì trong trường hợp này?
mmm cho tôi hiểu rõ điều này: vì vậy khi tôi annote() phương pháp beforeInvokingHandlerMethod của tôi bằng cách @ModelAttribute chú thích là điều tương tự nếu tôi đã trôi qua một cách chính xác một hình thức với "foo", "thanh" giá trị? và bên trong phương thức này tôi làm request.setAttribute ("foo", "bar"); ? – AndreaNobili
Excatly, bạn có một số thứ để hiểu rõ hơn về ModelAttribute, bạn có thể truy cập tài liệu chính thức của Spring MVC http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web /bind/annotation/ModelAttribute.html và cũng từ http://blog.trifork.nl/2009/05/14/simple-forms-with-spring-mvc-2-5/ –
Tôi đã đọc tài liệu này nhưng tôi đã có Trong thực tế bạn đang sayng tôi rằng khi tôi có một phương thức được chú thích bởi chú giải ModelAttribute, tôi ràng buộc một tham số phương thức cho một thuộc tính mô hình có tên và sau đó tôi có thể sử dụng nó trong một số khác phương pháp bằng cách sử dụng chú thích RequestAttribute? Nhưng trong trường hợp của tôi tham số mà tôi đang ràng buộc là gì? nó là tham số có tên "foo" có "thanh" là giá trị? Cảm ơn bạn rất nhiều bạn rất tử tế :-) – AndreaNobili