我有大约100个字段的bean。
在jsp上我有20个字段可以更新。
我提交表单时只需更新20个字段,并保留所有其余字段(80)而不更改具体bean。
我知道我可以从数据库读取bean并编写20个setter然后更新bean。编写20个请求参数作为控制器方法的参数
也很难看春天是否能提供更优雅的方式来解决我的任务?
答案 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/