Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 了解SpringMVC中@ModelAttribute和@RequestAttribute注释的使用_Java_Spring_Spring Mvc_Data Binding_Spring Annotations - Fatal编程技术网

Java 了解SpringMVC中@ModelAttribute和@RequestAttribute注释的使用

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请求由自定

我在春季MVC是个新手。目前我正在学习演示Spring MVC web框架特性的

在本例中,我很难理解如何处理自定义可解析Web参数

实际上,我有以下情况。在my home.jsp视图中,我有以下链接:

<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
}