【问题标题】:How to update model bean partially?如何部分更新模型bean?
【发布时间】:2015-12-01 12:28:36
【问题描述】:

我有大约 100 个字段的 bean。

在 jsp 上,我有 20 个可以更新的字段。

提交表单时我只需要更新 20 个字段并保留所有其余字段(80)而不更改具体 bean。

我知道我可以从数据库中读取 bean 并编写 20 个 setter,然后更新 bean。写20个请求参数作为控制器方法的参数也很丑

spring 是否提供更优雅的方式来解决我的任务?

【问题讨论】:

标签: java spring spring-mvc spring-form


【解决方案1】:

如果我理解正确的话,我们只是试图将某些字段从一个 bean 复制到另一个,我说过我倾向于使用 org.dozer.DozerBeanMapper,这将为我们完成必要的工作。

new DozerBeanMapper().map(sourceObj, targetObj);

https://howtodoinjava.com/automation/dozer-bean-mapping-examples/

【讨论】:

    【解决方案2】:

    在为表单 jsp 提供视图名称的处理程序中,您可以初始化一个新的模型 bean。这将导致 bean 具有所有 bean 字段的默认值。或者,您可以从可能已设置 bean 字段值的应用程序上下文中注入它。

    将此 bean 作为模型属性传递给 jsp 表单视图。

     bean = context.getBean("beanName") or bean = new Bean();    
     modelAndView.addObject("bean",bean);
    

    现在使用@SessionAttributes 将此模型对象包含在会话中。

    @SessionAttributes("bean")
    

    一旦您的处理程序方法完成执行,您的 bean 就会与所有字段值一起写入会话范围内。

    您可以使用以下表格来更新这 20 个字段

    <form:form action="handler's  requestMapping" modelattribute="bean">
    <form:input path="bean's first property name" />
     <%-- other properties similarly -->
    </form:form>
    

    在处理表单提交的处理方法中,使用@ModelAttribute 访问作为模型属性提交给表单的bean。

    @RequestMapping("XXXX")
    public ModelAndView/String handlerMethod(@ModelAttribute("bean") Bean bean) { /* method code here */
    }
    

    只要在提交表单时调用此处理程序方法,spring 就会从会话范围读取您的 bean,同时仅更新您在表单中更新的 20 个字段。这样,只有 20 个字段被更新,而其他字段保持原样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 2012-04-16
      相关资源
      最近更新 更多