hisakuの日記

hisakuの日記

エンジニアを目指す学生の雑多ブログ(現在はエンジニア)

LOCAL学生部総大会に参加してきた!

はじめに

LOCAL学生部の総大会に参加してきたので、ざっくり書きます。総大会とは、年1回のオフラインの集いです。

LOCAL学生部とは☟

https://www.local.or.jp/clubs/students

雰囲気

2日間、ビットスターさんのラウンジを借りて行いました。総大会の内容は、主に各々がもくもくして、ブログに成果をのせる。最後にLTしたい人はするという形でした。自分は、2日目から参加したので、ほとんどなにもやってないです。

ちょっとTwitterから雰囲気拝借します。

これが総大会かぁー(・ω・)(-ω-)(・ω・)(-ω-)

こんな感じ~

 

なにやってた?

なにもしてないとはいえ、少しやったので書きます。Spring bootのFormから受とった入力値のValidationを軽くやってました。

Spring bootはJavaフレームワークでView部分でTymeleafというテンプレートエンジンを使用しています。詳しい情報は、調べていただきたいです。申し訳ないです。解説する気力なかったのでコメント文書いてます。

Validation例☟

Controllerクラス
//画面用のFormクラスの初期化
@ModelAttribute
public ValidatedBattlePageForm setupValidatedBattlePageForm(){
return new ValidatedBattlePageForm();
}

/**言わずもがなPost
 *ValidatedBattlePageFromの直後にErrorsを引数にとらないとエラーになるので注意
 *引数のValidatedBattlePageFormが画面上の同名の項目にマップされる
 */
 @PostMapping("BattlePage")
    public String battle(@Validated(IBtPlFmOrder.class) ValidatedBattlePageForm validatedBattlePageForm, Errors errors, Model model) {

        //ValidationErrorならGameStartPageに遷移させる
        if(errors.hasErrors()){
            return "GameStartPage";
        }
Formで入力した値のクラス
public class ValidatedBattlePageForm {

    /**
     * @Notnullは入力値になにもないとき String型でないとエラーがブラウザにそのまま表示される
     * @Min@Maxは0~4以外はだめ messageでエラーじのメッセージを設定できる
     */

    //groupsでvalidationの順番を制御する
    @NotNull(message = "0~4の数字を入力してください",groups = IValidatedBtPlFm1.class)
    @Min(value=0, message = "0~4の数字を入力してください", groups = IValidatedBtPlFm2.class)
    @Max(value = 4, message = "0~4の数字を入力してください", groups = IValidatedBtPlFm3.class)
    private String playerLine;

    @NotNull(message = "0~4の数字を入力してください",groups = IValidatedBtPlFm1.class)
    @Min(value=0, message = "0~4の数字を入力してください",groups = IValidatedBtPlFm2.class)
    @Max(value = 4, message = "0~4の数字を入力してください",groups = IValidatedBtPlFm3.class)
    private String playerColumn;

    public ValidatedBattlePageForm(){
        this.playerLine = "";
        this.playerColumn = "";
    }
    public String getPlayerLine(){
        return playerLine;
    }
    public void setPlayerLine(String playerLine){
        this.playerLine = playerLine;
    }
    public String getPlayerColumn(){
        return playerColumn;
    }
    public void setPlayerColumn(String playerColumn){
        this.playerColumn = playerColumn;
    }
}

@NotNull @NotEmpty @NotBlankの挙動

qiita.com

@NotBlankの方が@NotNullよりいいいが、herbinateをmavenに追加する必要がある。しかし、version6からは非推奨になっている? herbinateのversionとかでうんだったので、@NutNullにしました。

追記
javax.validationを使うspring 2.0系から

インターフェース
public interface IValidatedBtPlFm1 {
}
public interface IValidatedBtPlFm2 {
}
public interface IValidatedBtPlFm3 {
}
@GroupSequence({IValidatedBtPlFm1.class, IValidatedBtPlFm2.class, IValidatedBtPlFm3.class})
public interface IBtPlFmOrder {
}

Formで入力した値のクラスで@NutNull @Min @Maxとつけている。このままではNotNullのときにも同時にMin MaxのValidationもしてしまう。そのため、Groupingする。Groupingするためには、interfaceが必要となる。@GroupSequenceをつけることで、バリデーションの順番を決めています。そして、Controllerクラスに@Validated(IBtPlFmOrder.class)を追加する。

HTML
<form action='BattlePage'  method='post'>
    縦(0~4)<input type='text' placeholder="0~4" name='playerLine' th:field="*{validatedBattlePageForm.playerLine}">
    <span th:if="${#fields.hasErrors('validatedBattlePageForm.playerLine')}" th:errors="*{validatedBattlePageForm.playerLine}" style="color:red"></span><br />
    横(0~4)<input type='text' placeholder="0~4" name='playerColumn' th:field="*{validatedBattlePageForm.playerColumn}">
    <span th:if="${#fields.hasErrors('validatedBattlePageForm.playerColumn')}" th:errors="*{validatedBattlePageForm.playerColumn}" style="color:red"></span><br />
    <button type='submit'>送信</button>
</form>

th:if=で指定のエラーも持っている場合のみタグを表示させ、th:errors= でそのエラー内容を表示させています。

最後に

最初の自己紹介で10代の子が多くて、うぉってなりました。 あと、半分くらいLOCAL学生部の部員がいるので塩化(エンカ)してみたいです。 というか、LOCAL学生部の千歳勢も話したことない人いたりするのでまずはそこからです。 まぁ、とりあえずたかぴろくんがいってたEDD(イベント駆動開発)で各々進捗が出せているっぽいので総大会、めでたしめでたしだったのでは?ブログも一応書いたのでえらい! 次は、OSCとかなのかな?? 本日は、ありがとうございました。終わり。

参考資料

www.slideshare.net

https://programming-information.com/2018/12/25/post-198/programming-information.com

qiita.com