質問編集履歴

2 htmlのnameが間違えているので修正

Aipa

Aipa score 44

2015/08/03 18:32  投稿

【PlayFramework】リレーションを使った時のValideteのアノテーションが効かない
いつもお世話になっています。
毎度ながらスミマセン。質問です。
Playframework 2.3を使って開発していますが、色々試したところ
リレーションを使った時のValideteのアノテーションが効かないことがわかりました。
```java
@Entity
public class User extends Model {
   @OneToOne(cascade = CascadeType.ALL, mappedBy = "user")
   @JsonManagedReference
   public UserBase userBase;
   @Required(message = "id情報を入力してください")
   public Integer id;
   @Required(message = "パスワード情報を入力してください")
   public String password;
}
@Entity
public class UserBase extends Model {
   @OneToOne
   @JoinColumn(name = "user")
   @JsonBackReference
   public User user;
   // 年齢
   @Required(message = "年齢を入力してください")
   public Integer age;
   // 住所
   @Required(message = "住所を入力してください")
   public String address;
}
```
こんな感じのEntityClassを用意しました。
Userにid名とpasswordを保持して、UserBaseで登録ユーザーの情報を持つ。って関係です。
これをFormを使って、Controllerでerrorをチェックするとキャッチすることができますが、エラーメッセージを取得することが出来ません。
詳細を書くと、User.classのエラーメッセージは取得できますが、UserBase.classは取得できないどころか、アノテーションも効いていないようなのです。
```java
public class UserController extends Controller {
   public static Result confirm() {
       Form<User> form = Form.form(User.class).bindFromRequest();
       // User.classのエラーは取得できるが
       // UserBase.classのエラーが取得できない
       if (form.hasErrors()) {
       // 省略
}
```
viewはヘルパーを使っているので多分問題はないと思います。
```scala
@(formValue:Form[User])
@import helper._
@(inputText(field = formValue("id"), 'class -> "form-control", 'name -> "roomName", '_label -> "ID"))
@(inputText(field = formValue("password"), 'class -> "form-control", 'name -> "roomName", '_label -> "パスワード"))
@(inputText(field = formValue("userBase.address"), 'class -> "form-control", 'name -> "roomName", '_label -> "住所"))
@(inputText(field = formValue("userBase.age"), 'class -> "form-control", 'name -> "roomName", '_label -> "年齢"))
@(inputText(field = formValue("id"), 'class -> "form-control", 'name -> "id", '_label -> "ID"))
@(inputText(field = formValue("password"), 'class -> "form-control", 'name -> "password", '_label -> "パスワード"))
@(inputText(field = formValue("userBase.address"), 'class -> "form-control", 'name -> "userBase.address", '_label -> "住所"))
@(inputText(field = formValue("userBase.age"), 'class -> "form-control", 'name -> "userBase.age", '_label -> "年齢"))
```
ちなみに、UserBase.age、addressに@NotNullを付与するとform.hasErrors()ではエラーになります。メッセージは相変わらず取れません。
ご存知の方、いらっしゃいましたら、お手数をお掛け致しますが、ご教授頂けますと助かります。
よろしくお願いいたしますm(_ _ )m
  • Java

    24865 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Play Framework 2

    170 questions

    Play Framework 2はPlayのメジャーバージョンです。現代の web アプリケーション開発に必要なコンポーネント及び API を統合した生産性の高い Java と Scala の web アプリケーションフレームワークです。

1 クラス名が間違えていたので修正

Aipa

Aipa score 44

2015/08/03 18:31  投稿

【PlayFramework】リレーションを使った時のValideteのアノテーションが効かない
いつもお世話になっています。
毎度ながらスミマセン。質問です。
Playframework 2.3を使って開発していますが、色々試したところ
リレーションを使った時のValideteのアノテーションが効かないことがわかりました。
```java
@Entity
public class User extends Model {
   @OneToOne(cascade = CascadeType.ALL, mappedBy = "user")
   @JsonManagedReference
   public UserBase userBase;
   @Required(message = "id情報を入力してください")
   public Integer id;
   @Required(message = "パスワード情報を入力してください")
   public String password;
}
@Entity
public class UserBase extends Model {
   @OneToOne
   @JoinColumn(name = "user")
   @JsonBackReference
   public User user;
   // 年齢
   @Required(message = "年齢を入力してください")
   public Integer age;
   // 住所
   @Required(message = "住所を入力してください")
   public String address;
}
```
こんな感じのEntityClassを用意しました。
Userにid名とpasswordを保持して、UserBaseで登録ユーザーの情報を持つ。って関係です。
これをFormを使って、Controllerでerrorをチェックするとキャッチすることができますが、エラーメッセージを取得することが出来ません。
詳細を書くと、User.classのエラーメッセージは取得できますが、UserBase.classは取得できないどころか、アノテーションも効いていないようなのです。
```java
public class UserController extends Controller {
   public static Result confirm() {
       Form<ReservationLog> form = Form.form(User.class).bindFromRequest();
       Form<User> form = Form.form(User.class).bindFromRequest();
       // User.classのエラーは取得できるが
       // UserBase.classのエラーが取得できない
       if (form.hasErrors()) {
       // 省略
}
```
viewはヘルパーを使っているので多分問題はないと思います。
```scala
@(formValue:Form[User])
@import helper._
@(inputText(field = formValue("id"), 'class -> "form-control", 'name -> "roomName", '_label -> "ID"))
@(inputText(field = formValue("password"), 'class -> "form-control", 'name -> "roomName", '_label -> "パスワード"))
@(inputText(field = formValue("userBase.address"), 'class -> "form-control", 'name -> "roomName", '_label -> "住所"))
@(inputText(field = formValue("userBase.age"), 'class -> "form-control", 'name -> "roomName", '_label -> "年齢"))
```
ちなみに、UserBase.age、addressに@NotNullを付与するとform.hasErrors()ではエラーになります。メッセージは相変わらず取れません。
ご存知の方、いらっしゃいましたら、お手数をお掛け致しますが、ご教授頂けますと助かります。
よろしくお願いいたしますm(_ _ )m
  • Java

    24865 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Play Framework 2

    170 questions

    Play Framework 2はPlayのメジャーバージョンです。現代の web アプリケーション開発に必要なコンポーネント及び API を統合した生産性の高い Java と Scala の web アプリケーションフレームワークです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る