th:action="@{/admin/pages/add}" : 태그의 action 속성 값
 
th:href="@{/admin/pages/add}" : 태그의 href 속성을 지정
 

form 태그에 th:href 를 썼다가
Request method 'POST' not supported 에러 뜸.
 
 
 
 
수정버튼을 눌렀을때
<tr th:each="page : ${pages}">
   <td><a th:href="@{'/admin/pages/edit/' + ${page.id}}">수정</a></td>
</tr>
 

id만으로 수정 전 값을 보여줄수있다?

 

 

[edit.html] 

히든으로 id와 sorting 값도 추가한다. (DB에서 못가져오니까)

id와 sorting은 수정하지 않지만 수정시 필요한 값들

<input type="hidden" th:field="*{id}">
<inputtype="hidden" th:field="*{sorting}">

※ 이걸 쓰지 않으면 수정이 아니라 새로운 페이지가 만들어진다.
 

☆  th:field를 쓰면 id,name,value값까지 자동입력 

 

 

 

 

@PostMapping("/add")와 비슷하다.

@PostMapping("/edit")
public String edit(@Valid Page page, BindingResult bindingResult, RedirectAttributes attr) {

    //에러 있으면 다시 에러페이지로
    if(bindingResult.hasErrors()) {
        return "admin/pages/edit";
    }
    
    attr.addFlashAttribute("message", "페이지 수정되었습니다.");
    attr.addFlashAttribute("alertClass", "alert-success");

    //슬러그가 없으면 제목을 소문자로,공백은 "-"로 대체 : 있으면 슬러그를 소문자로,공백을 "-"로 대체
    String slug = (page.getSlug() == "") ? page.getTitle().toLowerCase().replace(" ", "-")
    : page.getSlug().toLowerCase().replace(" ", "-");
    Page sulgExist = pageRepo.findBySlugAndIdNot(slug,page.getId()); //슬러그를 수정안할때를 대비해 같은 슬러그라고 에러 안뜨도록 id도 추가해서 구분하기
    //슬러그를 찾는데 id 로 찾은건 아님!

    if(sulgExist != null) {
        attr.addFlashAttribute("message", "이미 같은 슬러그가 존재합니다.");
        attr.addFlashAttribute("alertClass", "alert-danger");
        attr.addFlashAttribute("page", page); //또안됨 안지워지고 다시 불러오는 @@안됨 get매핑에서 @ModelAttribute써야 나옴??
    }else {
        page.setSlug(slug); //수정된 슬러그 저장
        //page.setSorting(100); // 기본 0으로 저장이 됨 수정할땐 필요없음

        pageRepo.save(page);
    }
    return "redirect:/admin/pages/edit/" + page.getId(); //post-redirect-get
}

 

 

findBySlugAndIdNot 가 내가 지은 메소드 이름이 아니고 원래 있는 이름.. ? = where slug = 슬러그 and id != 아이디

(slug,page.getId()) 두 변수를 왜 쓰느냐?

1. slug를 수정 안해도 id로 구분한다!

2. slug를 찾는데 현재id를 제외하고 다른 id로 있는 동일한 slug가 있는지 찾는다! 

Page sulgExist = pageRepo.findBySlugAndIdNot(slug,page.getId());

 

findBySlugAndIdNot 메소드 이름안에 And, Not 키워드로 메소드이름을 읽어야함

 

JPA 메소드 이름 안에서 지원되는 키워드

 

반응형
LIST

+ Recent posts