問題:オブジェクトをフィールドからパラメータとして取得する。フィールドフォームからオブジェクトを取得する
コード:フィールドを持つ エンティティユーザー:フィールドを持つ
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に別のリクエストを送信するよりも、悪い方法です。コーディング。 誰でも手伝いできますか?
これは答えではありませんが、なぜあなたはまだフォームを使用していますか?あなたは深刻な意味ですか? –
私はちょうどスタッフィングしているので、私はいくつかの情報を得ることができるものを使用しています。もっと良い解決策があれば私に教えてくれると思いますが、コードがより良く/より簡単に/より速くコード化されるなら、私は他のものを喜んで見ていきます。 – Vampirenostra
すでに嫌われている方法を勉強する代わりに、まずは単純なAjax呼び出しを学ぶことができます。バックエンドとフロントエンドをこのアプローチで強く結びつけないでください。 あなたはすでに学習段階に入っていますので、Spring MVCとAngular 2から始めることをお勧めします。簡単なjQueryを使った基本知識の開始ajax呼び出しはajaxを通してデータを送信して取得し、ライフサイクルを知り、既にSpring MVCを学んでいるので、Angular2にジャンプしてください。幸運:) –