簡體   English   中英

如何部分更新模型bean?

[英]How to update model bean partially?

我有大約100個字段的bean。

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

提交表單時,我只需要更新20個字段,並保留所有其余字段(80個),而無需更改具體的bean。

我知道我可以從數據庫中讀取bean並編寫20個setter,然后更新bean。 寫20個請求參數作為控制器方法的參數也是很丑陋的

春天是否提供解決問題的更優雅方式?

在提供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個字段,而其他字段則保持原樣。

如果我正確理解,我們只是試圖將org.dozer.DozerBeanMapper傾向於將某些字段從一個bean復制到另一個bean,這將為我們完成必要的工作。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM