簡體   English   中英

Java-=運算符不適用於@Controller中的類

[英]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()) ;
}

此后, messagesome_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.

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