[英]Java - = Operator doesn't work on a Class in a `@Controller`
我在@Controller
方法中有一個@ModelAttribute
的類Message
。 當我在方法內部執行message = some_message_object
,它不會引發任何錯誤,但是message
的值不會改變。 相反,我必須這樣做:
if(some_message_object != null) {
message.setId(some_message_object.getId()) ;
message.setFrom(some_message_object.getFrom()) ;
message.setTo(some_message_object.getTo()) ;
}
此后, message
與some_message_object
相同。 如果我使用=
錯誤,請幫助我。
編輯
這是原始代碼:
@RequestMapping("/readmessage")
public String readMessage(@ModelAttribute("message") Message message {
some_message_object = someService.getMessage() ;
message = some_message_object ;
}
Java不會通過引用傳遞方法參數:修改方法的參數只會修改局部變量,而不會修改調用方法中的變量。 但是,您可以像以前一樣通過調用對象上的方法來修改對象的內容。
假設你有
@Controller
public void method(@ModelAttribute Message message) {
message = some_message_object;
}
message可以看作是方法的局部變量,並且修改也是局部的。 您只能在參數上調用方法,而不能直接修改它們(可以,但是,調用者看不到該修改)。
如果您有多個屬性可以從一個對象復制到另一個對象,則可以在Message中添加一個更新方法:
public void update(Message message) {
this.field1 = message.field1;
this.field2 = message.field2;
// ...
}
或者使用諸如Dozer之類的bean映射器,它使用反射。
在您的情況下,最好的方法是像這樣設置屬性:
@RequestMapping("/readmessage")
public String readMessage(@ModelAttribute("message") Message message,
ModelMap map) {
some_message_object = someService.getMessage() ;
map.addAttribute("message", some_message_object) ;
}
這樣,您不必擔心message
。 干凈又容易:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.