2017-10-20 3 views
0

問題:オブジェクトをフィールドからパラメータとして取得する。フィールドフォームからオブジェクトを取得する

コード:フィールドを持つ エンティティユーザー:フィールドを持つ

Long id; 
String name; 
Office office; 

エンティティオフィス:

Long id; 
String name; 

newuser.vm

<title>NEW USER</title> 
<body> 
<form method="post" action="/save" property="user"> 
    Name: 
    <input type="text" name="name" path="name"/> <br> 

    Office: 
    <select name="office" path="office"> 
     #foreach($office in $offices) 
      <option value="$office">$office.name</option> 
     #end 
    </select> <br> 
    <input type="submit" value="SAVE"/> 
</form> 
</body> 

とコントローラ

@Controller 
public class ViewController { 

    @Autowired 
    private UserService userService; 
    @Autowired 
    private OfficeService officeService; 

@RequestMapping(value = "/newuser", method = RequestMethod.GET) 
    public ModelAndView newuser(){ 

     return new ModelAndView("fragments/newuser.vm","command",new User()); 
    } 
@RequestMapping(value = "/save", method = RequestMethod.POST) 
    public ModelAndView save(@ModelAttribute("user") User user){ 

     userService.create(user); 
     return new ModelAndView("redirect:/list"); 
    } 
//Model Attributes 
    @ModelAttribute 
    public void userTypesList(Model model){ 
     model.addAttribute("types", userService.getPositions()); 
    } 
    @ModelAttribute 
    public void officesList(Model model){ 
     model.addAttribute("offices", officeService.getAll(); 
} 

提出の結果、私はそのフィールドの1つとしてオフィスを持つ新しいユーザーを取得する必要があります。しかし、<option value="$office">$office.name</option>はオブジェクトの文字列表現を返しますが、オブジェクト自体は返しません。だから私は/ saveコントローラに正しく取得する方法を見つける必要があります。 Ofcourse私はフォームからフィールドのフィールドごとのフィールドを取得し、新しいユーザーを作成することができます。office.idをフォームから取得し、officeById(id)を取得するためにsqlに別のリクエストを送信するよりも、悪い方法です。コーディング。 誰でも手伝いできますか?

+0

これは答えではありませんが、なぜあなたはまだフォームを使用していますか?あなたは深刻な意味ですか? –

+0

私はちょうどスタッフィングしているので、私はいくつかの情報を得ることができるものを使用しています。もっと良い解決策があれば私に教えてくれると思いますが、コードがより良く/より簡単に/より速くコード化されるなら、私は他のものを喜んで見ていきます。 – Vampirenostra

+0

すでに嫌われている方法を勉強する代わりに、まずは単純なAjax呼び出しを学ぶことができます。バックエンドとフロントエンドをこのアプローチで強く結びつけないでください。 あなたはすでに学習段階に入っていますので、Spring MVCとAngular 2から始めることをお勧めします。簡単なjQueryを使った基本知識の開始ajax呼び出しはajaxを通してデータを送信して取得し、ライフサイクルを知り、既にSpring MVCを学んでいるので、Angular2にジャンプしてください。幸運:) –

答えて

0

は何が必要です:

IDフィールドがあるため何
<option value="$office.id">$office.name</option> 

。フォームが送信されると、オフィスIDだけが返信され、新しいユーザーを作成する間に、オフィステーブルに参加するために必要なのはこれだけです。

$officeにオブジェクト全体の文字列表現(つまり、toString()メソッド)を表示させることが期待されています。

+0

私はオフィスから取得しなければならないと思っていますか?しかし、Userオブジェクトのフィールドはオフィスです。 – Vampirenostra

+0

私はブラウザでHTTP 400 Exceptionを取得できませんでした。私がコントローラにデータを渡すことができる形式でオフィスのセレクタを無効にした場合、フィールドがぼんやりといっぱいになることがわかりました。 – Vampirenostra

+0

申し訳ありませんが、私はクラスのコードをすべてここに入れて、 id = null、type = {UserType @ 11601} "MANAGER"、email = "123"、password = "123"、name = "123"、tel = "123"というオブジェクトには、 "123"、regDate = null、lastActive = null、office = null。だから私はテキストフィールドはOKで、userTypeはENUMであるのでokですが、regDateはヌル! Userクラスのコンストラクタで説明されている現在の日付でなければなりません。何か案は? – Vampirenostra

関連する問題