【问题标题】:Java Spring @ModelAttribute method model nameJava Spring @ModelAttribute 方法模型名称
【发布时间】:2012-12-20 05:08:07
【问题描述】:

我已经阅读这个论坛很长一段时间了,发现它非常有用,感谢贡献者。我有一个问题困扰了我好几个星期。就这样。

     @RequestMapping(value="updateNote.htm",method=RequestMethod.POST)
     public String updateNote(@ModelAttribute("note")NoteBean nb, BindingResult res,Model model){
        daoobj.updateNote(nb.getName(),nb.getPath(), nb.getNote());

        model.addAttribute("note",daoobj.getByName(nb.getName()));
        return("success");
}

    @RequestMapping(value="updateNote.htm",method=RequestMethod.GET)
    public String updateNote(@ModelAttribute("note")NoteBean nb,Model model){  
        populateNoteBean();
        model.addAttribute("note",daoobj.getByName(nb.getName()));
        return("editNote");
}

@ModelAttribute("WHAT")
  public NoteBean populateNoteBean() {
    NoteBean nnb = new NoteBean();
    return nnb;
  }

使用方法 populateNoteBean() 模型属性是“WHAT”。但是,我使用的名称是“note”。因此,当我运行代码时,NoteBean 已正确保存到数据库中。我的问题是如何?似乎名称“WHAT”应该是“note”,或者模型属性将其保存为无名称。

感谢您的宝贵时间。

【问题讨论】:

  • 那个方法有什么作用?
  • 这个程序是一个简单的基于网络的笔记程序。 populateNoteBean 方法将 NoteBean 放入模型。另外两种方法是更新/修改数据库中的笔记。

标签: spring model-view-controller modelattribute


【解决方案1】:

使用您当前的代码,您将在模型中拥有两个notebean 实例!

第一个 spring 在你的控制器中调用所有模型属性注释的方法,并将结果放在模型中。其次,它评估来自您的请求映射方法的那些。

模型属性注释方法的要点是您可以选择如何创建您的 bean。例如从数据库中加载它。

我们这样使用这种方法:

  • modelattr 方法(name="note")

从 db 加载 bean

  • 使用 modelattr 参数 (name="note") 的请求映射方法

例如,将第一种方法创建的注释 bean 与来自提交的请求参数合并,您可以直接访问修改后的 bean。

一个不错的效果: 我们不想将所有属性的隐藏输入字段放在表单中,只是为了能够将实体与实体管理器合并。这样你就可以拥有一个只有一个属性的表单(加上一个让 id 能够获取实体)

或者另一个: 如果你的note bean是一个抽象类,spring就不可能实例化bean,因为它不知道要实例化什么。例如,您可以在 modelattr 注释方法中添加 requestparam 参数,然后自己决定做什么。

这在文档中有很好的描述。我相信,无论是参考还是在任一控制器、reqestmapping 或模型属性的 api 中。

【讨论】:

  • 哦,我刚刚从 method=RequestMethod.GET 中取出 populateNoteBean 并且它起作用了。我现在看到,我需要的只是将它包含在方法参数中,因为它从视图中获取了该信息。太感谢了! PS它不会让我投票给你的答案!
  • 我认为这取决于您在 SO 中的经验值。只接受答案。很高兴我能帮忙。
猜你喜欢
  • 2012-05-05
  • 2011-11-06
  • 2012-12-02
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多