Java 了解SpringMVC中@ModelAttribute和@RequestAttribute注释的使用
我在春季MVC是个新手。目前我正在学习演示Spring MVC web框架特性的 在本例中,我很难理解如何处理自定义可解析Web参数 实际上,我有以下情况。在my home.jsp视图中,我有以下链接:Java 了解SpringMVC中@ModelAttribute和@RequestAttribute注释的使用,java,spring,spring-mvc,data-binding,spring-annotations,Java,Spring,Spring Mvc,Data Binding,Spring Annotations,我在春季MVC是个新手。目前我正在学习演示Spring MVC web框架特性的 在本例中,我很难理解如何处理自定义可解析Web参数 实际上,我有以下情况。在my home.jsp视图中,我有以下链接: <a id="customArg" class="textLink" href="<c:url value="/data/custom" />">Custom</a> 处理此HTTP请求的方法是custom()。因此,当单击上一个链接时,HTTP请求由自定
<a id="customArg" class="textLink" href="<c:url value="/data/custom" />">Custom</a>
处理此HTTP请求的方法是custom()。因此,当单击上一个链接时,HTTP请求由自定义方法处理
我很难理解@RequestAttribute注释到底做了什么。我认为,在本例中,它将名为foo的请求属性绑定到一个新的字符串foo变量。但是这个属性是从哪里来的呢?这个变量是由Spring获取的吗
好的,我的想法是这个请求属性取自HttpServletRequest对象。我这样认为是因为,在这个类中,我还有一个beforeInvokingHandlerMethod()方法,它有一个会说话的名称,所以这个方法似乎在HttpServletRequest对象中设置了一个属性,该属性的名称为foo,值为bar,然后custom()方法可以使用这个值
事实上,我的输出是:
获取了'foo'请求属性值'bar'
为什么调用HandlerMethod()之前调用beforeInvokingHandlerMethod()方法
为什么调用HandlerMethod()之前的要用@ModelAttribute注释?在这种情况下,它意味着什么?RequestAttribute只是您在表单提交中传递的参数。让我们通过一个示例来理解 假设我有下面的表格
<form action="...">
<input type=hidden name=param1 id=param1 value=test/>
</form>
嗯,让我很好地理解这一点:那么,当我注释@modeldattribute的beforeingunghandlermethod()方法时,如果我正确地传递了一个带有“foo”、“bar”值的表单,那么注释也是一样的吗?在这个方法中,我执行request.setAttribute(“foo”,“bar”)?此外,为了更好地理解ModelAttribute,您可以访问Spring MVC的官方文档,我也阅读了该文档,但我在理解它时遇到了一些问题:-(实际上,你是说当我有一个由ModelAttribute注释注释的方法时,我将一个方法参数绑定到一个命名的模型属性,然后我可以通过使用RequestAttribute注释在其他方法中使用它?但是在我的情况下,我绑定的参数是什么?是名为“foo”的参数吗“酒吧”作为价值?非常感谢你非常友好:-)欢迎你,如果你愿意,现在接受并投票表决我的答案:)@AndreaNobili谢谢你,伙计。
<form action="...">
<input type=hidden name=param1 id=param1 value=test/>
</form>
@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
}