0

我有一个Message方法@ModelAttribute中的类@Controller。当我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 ;
}
4

2 回答 2

4

Java不通过引用传递方法参数:修改方法的参数只修改局部变量,修改调用方法中的变量。但是,您可以通过调用对象的方法来修改对象的内容,就像您所做的那样。

假设你有

@Controller
public void method(@ModelAttribute Message message) {
    message = some_message_object;
}

message 可以看成是方法的局部变量,修改也是局部的。您只能在参数上调用方法,而不能直接修改它们(好吧,您可以,但是调用者看不到该修改)。


如果您有多个属性要从一个对象复制到另一个对象,您可以在消息中添加更新方法:

public void update(Message message) {
    this.field1 = message.field1;
    this.field2 = message.field2;
    // ...
}

或使用 bean 映射器,例如Dozer,它使用反射。

于 2012-10-10T19:59:27.077 回答
1

在您的情况下,最好的方法是像这样设置属性:

@RequestMapping("/readmessage")
public String readMessage(@ModelAttribute("message") Message message,
  ModelMap map) {
    some_message_object = someService.getMessage() ;
    map.addAttribute("message", some_message_object) ;
}

这样,您就不必担心message。它既干净又容易:)

于 2012-10-11T15:12:16.320 回答