[spring]Web階層開発-1

5699 ワード

ホームページとレイアウト


lombokの@slf 4 jでorgをインポートします.slf4j.LoggerFactory; ログは一緒に印刷できます
HomeControllerでクラスからhomeを呼び出すのでresources>templates>でhomeします.htmlの生成
@Controller
@Slf4j
public class HomeController {

    @RequestMapping("/")
    public String home() {
        log.info("home controller");
        return "home";
    }
}
home.htmlで
<head th:replace="fragments/header :: header">
部分を見ると置き換えです.
まだこの部分は作られていないので、動いてみると

エラー表示正常
templatesフォルダの下にfragmentsフォルダを作成し、bodyheader、footer、header名のhtmlファイルを作成し、内容を入力します.

織りは織ることができる.
cssや他のものは適用されないので(htmlのみ適用)
getbootstrap.comから4.3版をダウンロードします.
resources>静的フォルダの下にcssフォルダとjsフォルダを挿入
同期、再構築、リフレッシュを行うと、cssを適用する画面が表示されます.

登録


授業について行く.
import javax.validation.constraints.NotEmpty;
@NotEmpty(message=「必須メンバー名」)
認識できない問題があるからです.
build.グレー
implementation 'org.springframework.boot:spring-boot-starter-validation'
入れました.
package jpabook.jpashop.controller;

import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotEmpty;
@Getter @Setter
public class MemberForm {
    @NotEmpty(message = "회원 이름은 필수 입니다")
    private String name;
    
    private String city;
    private String street;
    private String zipcode;
}
model.addAttribute("memberForm", new MemberForm()); モデルに変換するため、画面からオブジェクトにアクセスできます.
会員登録フォーム画面(templates/member/createMemberForm.html)

現在はpost方式で伝達され、現在はPostMappingが行われている.
public String create(@Valid MemberForm form, BindingResult result) {
書き込みスプリングを使用した検証機能
@PostMapping("/members/new")
    public String create(@Valid MemberForm form) {
        Address address = new Address(form.getCity(), form.getStreet(), form.getZipcode());

        Member member = new Member();
        member.setName(form.getName());
        member.setAddress(address);

        memberService.join(member);
        return "redirect:/";

    }
会員になると正しい挿入が見られます

BindingResultに書くと、resultでエラーが発生した場合、返されるコードも完了します.
@PostMapping("/members/new")
    public String create(@Valid MemberForm form, BindingResult result) {
        if (result.hasErrors()){
            return "members/createMemberForm";
        }

        Address address = new Address(form.getCity(), form.getStreet(), form.getZipcode());

        Member member = new Member();
        member.setName(form.getName());
        member.setAddress(address);

        memberService.join(member);
        return "redirect:/";

    }

Submitで問題が発生した場合、Bindingは結果を表示してフォームに送信します.

フィールドにエラーがある場合は、nameフィールドに対してエラーメッセージが抽出され、出力されます.
だから「会員名は必須」と呼ばれています.
ifエラーがある場合は、timelifeが提供するnameに関連するエラー出力を使用します.

メンバー・リストの表示

@GetMapping(value = "/members")
public String list(Model model) {
List<Member> members = memberService.findMembers();
model.addAttribute("members", members);
return "members/memberList";
}
MemberControllerクラスに追加します.
メンバーリストビューtemplates/members/memberList.htmlの生成
<td th:text="${member.address?.city}"></td> 
から.nullであれば、行わないことを表す.
新しくカタログを入れてチェックすれば、うまく出力できます.

非常に単純な必要がある場合、フォームオブジェクトを必要とせずにエンティティ(MemberForm)画面を直接登録および変更できます.
使用可能
要求が単純でない場合、entityをフォーム処理すると、entityが画面処理に使用される機能が徐々に増加します.これによりスクリーンに関連するものが発生し,シンボルが乱雑になる.最終的にはメンテナンスが困難になります.
実際の操作では、エンティティはコアビジネスロジックのみを有し、画面向けのロジックは持たない必要があります.
JAPを使用する場合は、エンティティに依存することなく、できるだけ純粋にエンティティを使用します.
コアビジネスロジックのみに依存する設計が重要
これにより、アプリケーションが大きくなっても、メンテナンス性が向上します.
エンティティには、画面に表示されないコアビジネスロジックのみが必要です.
スクリーンAPIはフォームオブジェクトまたはDTO(Data Transferオブジェクト)を使用します.
アンティは?最大限!純粋!
そしてapiの作成時に絶対外部エンティティXに戻る
(テンプレートエンジンはサーバ側で動作しますが、まあまあです)