如何部分更新模型bean?

时间:2015-09-05 13:09:07

标签: java spring spring-mvc spring-form

我有大约100个字段的bean。

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

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

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

也很难看

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

2 个答案:

答案 0 :(得分:0)

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

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

TABLE1= "table1", TABLE2="table2", ITEM1= "item1"

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

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

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

您可以使用以下表单更新20个字段

@SessionAttributes("bean")

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

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

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

答案 1 :(得分:0)

如果我正确理解的话,我们只是试图将org.dozer.DozerBeanMapper复制到一个bean到另一个bean,这将为我们做必要的工作。

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

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