【问题标题】:How does @ModelAttribute send data to jsp@ModelAttribute 如何向jsp发送数据
【发布时间】:2016-03-24 10:29:53
【问题描述】:

我有一个问题。我在formController 中的函数上使用@ModelAttribute

@ModelAttribute("modelAttrVar")
public ModelAttr function(){
    ModelAttr obj = new ModelAttr();
    //...code
    return obj;
}

但是这个模型属性并没有添加到我返回的ModelAndView中.....

public ModelAndView func2(){
    ModelAndView obj = new ModelAndView();
    obj.addAttribute("variableName" , value);
    obj.setViewName("viewName");
    return obj;
}

现在,当我看到 jsp 时,模型属性变量 modelAttrVar 在 jsp 中可用并且正在给出值。怎么样?

请帮忙!!

【问题讨论】:

    标签: jsp spring-mvc modelattribute model-view


    【解决方案1】:

    有什么不清楚的!

    @ModelAttribute 注解用于将 jsp 中的表单绑定到控制器,以使编写在 html 表单中的所有字段在控制器中可用。

    What is @ModelAttribute in Spring MVC?

    所以基本上一个带有@ModelAttribute 注释的方法在发布请求(表单提交)之后应该作为landing point 方法工作。

    让我们举个例子,你有一个带有两个变量的 POJO:

    public class ModelAttrExample {
    
    String name;
    String lastName;
    
    ///getter and setter...
    }
    

    一个 JSP indexForm.jsp

    <form:form action="/greeting" >
     <form:input path="name" />
     <form:input path="lastName" />
    
     <input type="submit" value="Submit" />
    </form:form>
    

    还有一个 SpringController

    @Controller
    public class GreetingController {
    
    @RequestMapping(value="/greeting", method=RequestMethod.GET)
    public String greetingForm(Model model) {
        model.addAttribute("", new ModelAttrExample ());
        return "indexForm";
    }
    
    @RequestMapping(value="/greeting", method=RequestMethod.POST)
    public String greetingSubmit(@ModelAttribute ModelAttrExample example, Model model) {
    
       example.getName();//same form value
       example.getLastName(); //same form value
       //do your logic here...
       }
    }
    

    一旦提交表单,greetingSubmit() 方法就会被触发,并且填充了表单数据的ModelAttrExample 的实例将在该方法中可用。

    所以... @ModelAttribute 用于从 html 表单字段中获取值并将这些数据放入类实例变量中。

    我建议你从Spring学习这个教程, 写的很好,很容易理解

    如果您需要更多信息,请随时询问:)

    【讨论】:

    • 感谢先生...您的回复。实际上是当我们从列表屏幕打开记录时。调用转到 FormController,然后转到 modelAttribute 函数 @ModelAttribute("modelAttrVar") public ModelAttr function(){} 从 db 中提取特定记录。然后在 func2() 之后我们收到 modelAndView 然后最后进入 jsp。然后在 jsp 中我们得到 modelAttrVar 模型属性,如 ${modelAttrVar.var1} 。
    • 因此意味着在打开记录时,我们永远不会将此 modelAttrVar 添加到 ModelAndView 但它仍会转到 jsp 并且来自 modelAttrVar 对象的数据会填充 jsp 页面上的相关字段。怎么样?
    • 我还是不明白你的流程,你说“那么在 func2() 之后我们收到 modelAndView”,谁在调用 func2() ?您如何在该方法中接收模型和视图?如果您只需要从列表中显示记录选择,例如,您可以触发通过获取 id 传递的方法,从数据库中获取数据,然后使用 model.addAttribute("modelAttrVar", youExtracteInstanceOfmodelAttrVar); 呈现提取的值;然后在 jsp 中使用 ${modelAttrVar.var1} 取值,请显示整个代码并准确说明您需要做什么
    猜你喜欢
    • 2016-09-25
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 2017-10-18
    相关资源
    最近更新 更多