[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に戻る
(テンプレートエンジンはサーバ側で動作しますが、まあまあです)
Reference
この問題について([spring]Web階層開発-1), 我々は、より多くの情報をここで見つけました https://velog.io/@vector13/spring-웹-계층개발-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol