掲示板の最初の画像サムネイルの作成


  • 投稿のhtmlをグループ化するにはjavaのhtmlグループ化ツールjsgroupライブラリを使用します.
  • パケット画像ラベルのsrc要素をモデルに入れて出力します.
  • ユーザーが画像を登録していない場合、エラー画像が自動的に登録されます.
  • board/list.jsp

    board/detail.jsp

    pom.xml

    <dependency>
     		<groupId>org.jsoup</groupId>
     		<artifactId>jsoup</artifactId>
     		<version>1.14.3</version>
    </dependency>

    controller

    // 게시글 목록보기 
    @GetMapping("/board")
    public String home(Model model, 
    		@PageableDefault(page = 0, size = 3, sort = "id", direction = Sort.Direction.DESC) Pageable page,
    		@RequestParam(required = false, defaultValue = "") String searchText) {
    	Page<Board> boardsEntity = boardService.게시글목록보기(page, searchText);
    	Iterator<Board> it = boardsEntity.iterator();
    
    	while(it.hasNext()) {
    		Board boardEntity = it.next();
    
    		//Jsoup를 이용해서 첫번째 img의 src의 값을 팡싱한 후 값을 저장
    		Document doc = Jsoup.parse(boardEntity.getContent());
    		if(doc.selectFirst("img") != null) {
    			String src = doc.selectFirst("img").attr("src");
    			boardEntity.setContent(src);
    		}
    	}
    	
    	int startPage = Math.max(1, boardsEntity.getPageable().getPageNumber() - 4);
    	int endPage = Math.min(boardsEntity.getTotalPages(), boardsEntity.getPageable().getPageNumber() + 4);
    	int nowPage = boardsEntity.getPageable().getPageNumber() + 1;
    	model.addAttribute("startPage", startPage);
    	model.addAttribute("endPage", endPage);
    	model.addAttribute("nowPage", nowPage);
    	model.addAttribute("boardsEntity", boardsEntity);
    	return "board/list";
    }

    html

    <c:forEach var="board" items="${boardsEntity.content}">
    	<!-- 카드 글 시작 -->
    	<div class="card d-flex flex-row align-items-center overflow-hidden" style="height:150px;">
    		<div class="card-image w-25 ">
    			<img class="card-img-top h-auto" src="${board.content}" alt="Card image cap" onerror="this.src='/image/default-image.png'">
    		</div>
    		<div class="card-body">
    		<!-- el표현식은 변수명을 적으면 자동으로 get함수를 호출해준다. -->
    			<h4 class="card-title">${board.title}</h4>
    			<a href="/board/${board.id}" class="btn btn-primary">상세보기</a>
    		</div>
    	</div>
    	<br>
    	<!-- 카드 글 끝 -->
    </c:forEach>코드를 입력하세요