2017-02-21 12 views
-1

私は休止状態のエンティティオブジェクトを持っています。このオブジェクトを更新する必要があるので、このオブジェクトをフォームに渡しました。フォームで私はいくつかの値を変更し、他のものは一定です。そして私はこれらの定数値をクライアントに表示することはできないので、html形式で明示的に表示する以外に別の方法で次のページに渡す必要があります。ここSpringにフォームにないmodelAttribute値を取得する方法

@GetMapping("/update") 
public String update(@RequestParam("dataId") int id, Model md){ 
    Doctor dr = doctorService.getById(id); 


    /*for example lets say this doctor object has following properties 
    dr.setId(3); 
    dr.setName("James"); 
    dr.setUserId(7); 
    */ 

    md.addAttribute("doctor", dr); 


    return "object-form"; 
} 

ビューで私の形である:ここ

私の目的は、コントローラで得られ、ビューに渡され

<form:form action="save" modelAttribute="doctor" method="post"> 

    <form:errors path="name"></form:errors> 
    <form:input path="name" placeholder="Doktor İsmi" class="form-control" /> 

    <form:hidden path="id" /> 
    <input type="submit" value="Save doc" /> 
</form:form> 

フォームから、唯一ID値ただし、のユーザーIDはnullです。私はポストなしでこのuserIdを取得する必要があります。私はこのRを達成することができます方法を知っても、それのために方法はありません

@PostMapping(value="/save") 
public String save(@Valid Doctor dr, BindingResult bindingResult){ 

    doctorValidator.validate(dr, bindingResult); 
    if (bindingResult.hasErrors()) { 
     return "object-form"; 
    } 
    else{ 
     doctorService.save(dr); 
     return "redirect:list"; 
    } 
} 

は、ここで私は、オブジェクトを扱うというのが私のポストプロセスコントローラです。 Googleで検索しましたが、解決策は見つかりませんでした。

はあなたがDBから、前の医師のオブジェクトを取得し、以下のようにそこからユーザーIDを取得することができ,,

答えて

1

をたくさんありがとう:

@PostMapping(value="/save") 
public String save(@Valid Doctor dr, BindingResult bindingResult){ 
    Doctor prevDr = doctorService.getById(dr.getId()); 
    dr.setUserId(prevDr.getUserId()); 
    doctorValidator.validate(dr, bindingResult); 
    if (bindingResult.hasErrors()) { 
     return "object-form"; 
    } 
    else{ 
     doctorService.save(dr); 
     return "redirect:list"; 
    } 
} 
+0

これは私の問題を解決しますが、私はこれが良いかどうかわからないです実際には、私は基本的な更新操作を実装しようとしています。これは、これを行うための主要な方法ですか? (私は休止状態と春の初心者です) –

+0

あなたがuserIdともっと遠く離れた仕事をしていない場合は、フォームのモデルクラスを作成することをお勧めします。更新中は、そのフォームモデルオブジェクトからエンティティオブジェクトを作成して保存します。これにより、新しい値で行が更新され、フォームから設定されていない他の(この場合はuserId)が保持されます。これにより、DBに1つの特別な選択クエリが保存されます。 – mhshimul

+0

ありがとう、これはより良いと思います。もう1つのポイント:show-update-formメソッドからビューモデルオブジェクトを渡して、コントローラクラスのメソッドを保存して、それをHiberanateエンティティに割り当てる方法を教えてください。 –

関連する問題