Spring 07
・useridの保存機能を修正しました。
問題点:UserEntityが値をもらえません。
解決方法:Controllerで値をもらって、保存します。
public ModelAndView form(
@ModelAttribute("formModel") @RequestParam(value = "userid", required = true) String userid,
UserEntity user, ModelAndView mav) {
user.setUserId(userid);
repository.saveAndFlush(user);
return mav;
}
Controllerで値をもらうのは、Controllerの役割じゃないと思います。
他の解決方法がないので、Controllerで値をもらいます。
・エラーメッセージを出力しました。
<li th:each="error : ${#fields.detailedErrors()}"
class="err" th:text="${error.message}" />
#fields
エンティティの各フィールドをバリデーションチェックした結果などがまとめられたオブジェクトです。
detailedErrors
発生したエラーに関する情報をひとまとめのリストとして返すメソッドです。
・各入力フィールドにエラーを表示
<input type="text" name="name" th:value="*{name}" th:errorclass="err" />
エラーが発生した際に適用されるクラス名を指定します。
エラーが起きたらテキストを赤い表示に変えます。
<div th:if="${#fields.hasErrors('name')}" th:errors="*{name}" th:errorclass="err">
エラーが発生している時だけ表示します。
このフィールドのエラーだけを表示します。
・エラーメッセージの日本語化
新しいプロパティファイルを追加しました。
org.hibernate.validator.constraints.NotBlank.message = 空白は不可です。
org.hibernate.validator.constraints.NotEmpty.message = 空白は不可です。
javax.validation.constraints.Max.message = {value} より小さくして下さい。
javax.validation.constraints.Min.message = {value} より大きくして下さい。
org.hibernate.validator.constraints.Email.message = メールアドレスではありません。
・オリジナルのバリデータを作成しました。
下記のクラスは入力したデータ型を確認する機能です。
public class PhoneValidator implements ConstraintValidator<Phone, String> {
@Override
public void initialize(Phone phone) {
}
@Override
public boolean isValid(String input, ConstraintValidatorContext cxt) {
if (input == null) {
return false;
}
return input.matches("[0-9()-]*");
}
}
下記のインターフェースは新しいアノテーションを使えるようになるものです。
@Documented
@Constraint(validatedBy = PhoneValidator.class)
@Target({ ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@ReportAsSingleViolation
public @interface Phone {
String message() default "please input a phone number.";
Class<?> groups() default {};
Class<? extends Payload> payload() default {};
}
補充:
インターフェースとは、クラスに含まれるメソッドの具体的な処理内容を記述せず、変数とメソッドの型のみを定義したものです。
抽象メソッドは具体的な処理内容を記述せず、メソッド名や引数などの定義だけを宣言するメソッドです。
・Serializable(シリアライズ・直列化)
この機能を使うと、簡単にインスタンスを外部記憶装置などに保存し、インスタンスの情報を永続化することができます。
・@Controller、@Service、@Repository、@Componentの違い
@Controller
Spring MVCでコントローラー層のクラスに付与します。
Controller は、主に以下の役割を担います。
1.画面遷移の制御
2.ドメイン層の Service の呼出 (主処理を実行します。)
@Service
Sping MVCでサービス層のクラス(ビジネスロジック等)に付与します。
Service は業務処理を提供します。
@Repository
Spring MVCでデータ層のクラス(DAO等のDBアクセスを行うクラス)に付与します。
@Component
Spring MVCに限らず、SpringのDIコンテナにbeanとして登録したいクラスへ付与します。
@SuppressWarning
コンパイル・ユニットのサブセットに関するコンパイル警告を無効にできます。
@SuppressWarnings("unchecked")
unchecked : 未検査のオペレーションに関連する警告の抑止
@PersistenceContext
EntityManagerのbeanを取得してフィールドに設定します。