Spring 5プログラミング入門12章
MVC2
情報
スプリングが基本文字列またはメッセージを出力すると、JSPにハードコーディングが表示されます.
このような大きな繰り返しで使用されるハードコーディングを直接使用すると、同じ文字長を変更するときに問題が発生します.
ハードコーディングされたコードをすべて見つけて変更するからです.
(intellijでコードすると、直接全部見つけて交換するのは難しくありません.)
src/main/resourcesでメッセージフォルダを作成し、フォルダにタグを付けます.propertiesファイルを生成します.
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource ms =
new ResourceBundleMessageSource();
ms.setBasenames("message.label");
ms.setDefaultEncoding("UTF-8");
return ms;
}
スプリング設定に追加します.Property値としてメッセージを送信します.labelが提供され、メッセージパッケージに属するlabel propertyファイルからメッセージを読み出すように設定されます.
空のIDをMessageSourceに生成する必要があります.
<%@ taglib prefix="form"uri="http://www.springframework.org/tags/form "%>
<%@ taglib prefix="spring"uri="http://www.springframework.org/tags "%>
jsp上部にメッセージを入力し、
国によってメッセージを指定することもできます.
labelko.properties
label_en.properties
Labelの後ろに言語形式の接尾辞を付けて、koは韓国語で、enは英語でいいです.
カスタムオブジェクトの検証とエラーコードの指定
public interface Validator {
boolean supports(Class<?> clazz);
void validate(@Nullable Object target, Errors errors);
}
Springでサポートされている検証オブジェクトのインタフェース.supportsはbooleanタイプで、検証できるかどうかを教えてくれます.
targetは検証するデータを入力すればよく、errorにはエラー結果が含まれていればよい.
//컨트롤러 클래스
@Controller
public class RegisterController {
private MemberRegisterService memberRegisterService;
public void setMemberRegisterService(
MemberRegisterService memberRegisterService) {
this.memberRegisterService = memberRegisterService;
}
@RequestMapping("/register/step1")
public String handleStep1() {
return "register/step1";
}
@PostMapping("/register/step2")
public String handleStep2(
@RequestParam(value = "agree", defaultValue = "false") Boolean agree,
Model model) {
if (!agree) {
return "register/step1";
}
model.addAttribute("registerRequest", new RegisterRequest());
return "register/step2";
}
@GetMapping("/register/step2")
public String handleStep2Get() {
return "redirect:/register/step1";
}
@PostMapping("/register/step3")
public String handleStep3(RegisterRequest regReq, Errors errors) {
new RegisterRequestValidator().validate(regReq, errors);
if (errors.hasErrors())
return "register/step2";
try {
memberRegisterService.regist(regReq);
return "register/step3";
} catch (DuplicateMemberException ex) {
errors.rejectValue("email", "duplicate");
return "register/step2";
}
}
}
//검증 클래스
public class RegisterRequestValidator implements Validator {
private static final String emailRegExp =
"^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" +
"[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
private Pattern pattern;
public RegisterRequestValidator() {
pattern = Pattern.compile(emailRegExp);
System.out.println("RegisterRequestValidator#new(): " + this);
}
@Override
public boolean supports(Class<?> clazz) {
return RegisterRequest.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
System.out.println("RegisterRequestValidator#validate(): " + this);
RegisterRequest regReq = (RegisterRequest) target;
if (regReq.getEmail() == null || regReq.getEmail().trim().isEmpty()) {
errors.rejectValue("email", "required");
} else {
Matcher matcher = pattern.matcher(regReq.getEmail());
if (!matcher.matches()) {
errors.rejectValue("email", "bad");
}
}
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "required");
ValidationUtils.rejectIfEmpty(errors, "password", "required");
ValidationUtils.rejectIfEmpty(errors, "confirmPassword", "required");
if (!regReq.getPassword().isEmpty()) {
if (!regReq.isPasswordEqualToConfirmPassword()) {
errors.rejectValue("confirmPassword", "nomatch");
}
}
}
}
コントローラクラスで、supports()メソッドは、パラメータに渡されたclazzオブジェクトがRegisterRequestクラスに変換できるかどうかをチェックします.REECTIFEmptyOrWhitespace-スペース、null、または空の文字列.
REECTIFEmpty-空または空
errors.hasErrors()メソッドを使用して、エラーが存在するかどうかを確認します.
グローバルオブジェクトの場合、プレゼンテーションを使用できる大規模なバージョンに応じて、検証範囲を指定できます.
彼はクマンドのPropertyにアニメーションを作成すればいいと言った.
バージョンごとに異なるので、使用したい説明をバージョンごとに検索したほうがいいです.
Reference
この問題について(Spring 5プログラミング入門12章), 我々は、より多くの情報をここで見つけました https://velog.io/@wkdrjswkd/스프링5-프로그래밍입문-12장テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol