And*_*ili 6 java data-binding spring spring-mvc spring-annotations
我是Spring MVC的新手.目前我正在研究Spring MVC Showcase,它展示了Spring MVC Web框架的功能.
我有一些问题需要了解如何在此示例中处理自定义可解析的Web参数.
在实践中,我有以下情况.在我的home.jsp视图中,我有以下链接:
<a id="customArg" class="textLink" href="<c:url value="/data/custom" />">Custom</a>
Run Code Online (Sandbox Code Playgroud)
此链接生成对URL的HTTP请求:"/ data/custom"
包含处理此请求的方法的控制器类具有以下代码:
@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 + "'";
}
}
Run Code Online (Sandbox Code Playgroud)
处理此HTTP请求的方法是custom().因此,单击上一个链接时,HTTP请求将由自定义方法处理.
我有一些问题需要了解@RequestAttribute注释到底做了什么.我认为,在这种情况下,它将名为foo的请求属性绑定到一个新的String foo变量.但是这个属性取自何处?这个变量是Spring采用的吗?
好的,我的想法是这个请求属性取自HttpServletRequest对象.我是这么认为的,因为在这个类中,我还有一个具有说话名称的beforeInvokingHandlerMethod()方法,所以看起来这个方法在HttpServletRequest对象中设置了一个名称= foo和value = bar的属性,然后所以custom()方法可以使用这个值.
实际上我的输出是:
得到'foo'请求属性值'bar'
为什么在custom()方法之前调用beforeInvokingHandlerMethod()?
为什么beforeInvokingHandlerMethod()由@ModelAttribute注释注释?在这种情况下它意味着什么?
这RequestAttribute 只不过是您在表单提交中传递的参数。让我们通过一个示例来理解
假设我有以下表格
<form action="...">
<input type=hidden name=param1 id=param1 value=test/>
</form>
Run Code Online (Sandbox Code Playgroud)
现在,如果我有以下控制器,该控制器与请求 url 进行映射,该请求 url 与表单提交进行映射,如下所示。
@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("param1") String param1 ) {
// Here, I will have value of param1 as test in String object which will be mapped my Spring itself
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1949 次 |
| 最近记录: |