package jp.dip.arimodoki.cntl;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import jp.dip.arimodoki.model.PromenadeFormIf;
@Controller
public class Promenade {
/**
* このコントローラは、PromenadeFormクラスを
* リクエスト/レスポンス用パラメータのデータモデルとして使います
* */
@Autowired
private PromenadeFormIf PromenadeForm;
/**
* PromenadeFormクラスを、"PromenadeFormData"という名前で、Modelにバインドします。
* この処理を行うことで、viewにレスポンスする場合は
* 特にレスポンス処理を明記しなくても、自動的にModelがviewに返却され
* view側(Thymeleaf側)では、PromenadeFormData.プロパティ名
* でFormBeanのプロパティが参照可能となります。
* ※)@ModelAttributeアノテーションのバインド名が重要であって、
* メソッド名はなんでも構いません(クラス内で重複しなければ)
* @return バインドされたFormBeanのインターフェース PromenadeFormIfを返します。
*/
@ModelAttribute("PromenadeFormData")
private PromenadeFormIf setupBind() {
return this.PromenadeForm;
}
/**
* 最初の入力画面を単純に表示するためだけのメソッドです
* @return view名(入力画面)
*/
@RequestMapping(value = "/promenade")
public String promenade() {
return "promenade";
}
/**
* 入力結果検証メソッド
* @param formbean 入力検証用FormBean
* @param result エラー検証結果
* @return view名(検証成功なら結果画面、失敗なら入力画面)
*/
@RequestMapping(value = "/promenaderes")
public String promenaderes(
@Valid @ModelAttribute("PromenadeFormData") PromenadeFormIf formbean,
BindingResult result
) {
FieldError perror = result.getFieldError("age");
int age = formbean.getUser().getAge();
if(perror == null) {
if(age >=50 && age < 60) {
result.rejectValue("age","out of Range","50歳以上60歳未満は入力できません。");
}
}
if (result.hasErrors()) {
return "promenade";
}
String[] checkVal = this.PromenadeForm.getCheckVals();
formbean.setFavorite(checkVal[0]);
return "promenaderes";
}
}
|