0

メソッド内のクラスMessageがあります。メソッド内で行うと、エラーはスローされませんが、の値は変わりません。代わりに、これを行う必要があります。@ModelAttribute@Controllermessage = some_message_objectmessage

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;
}

メッセージはメソッドのローカル変数と見なすことができ、変更もローカルです。パラメータに対してメソッドを呼び出すことはできますが、直接変更することはできません(もちろん、できますが、その変更は呼び出し元には表示されません)。


あるオブジェクトから別のオブジェクトにコピーする複数の属性がある場合は、メッセージに更新メソッドを追加できます。

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

または、反射を使用するDozerなどのBeanマッパーを使用します。

于 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 に答える