Spring Framework-5


📕 載せた文章を読んでみましょう.

ビューの変更


board.jspの変更


記事タイトルをクリックして、参照できるように変更します.
<td><a href="/post/${post.id}">${post.title}</a></td>

post.jspの変更


以前に文章を書くときに使用したビューを変更して、文章を読むようにします.モデルpostが存在する場合はpostの内容が表示され、存在しない場合は以前のように新しい文章を入力するように変更されます.formの変更は次のようになります.
<c:choose>
	<c:when test="${post!=null}">
   		<form action="/post" method="post" class="user">
        		<div class="form-group">
          			<input type="text" class="form-control form-control-user" name="title" placeholder="Title" readonly value="${post.title}">
      			</div>
            		<div class="form-group">
                		<textarea class="form-control form-control-user" name="content" readonly>${post.content}</textarea>
                	</div>
                	<div class="form-group">
                		<input type="text" class="form-control form-control-user" name="name" placeholder="name" readonly value="${post.name}">
               		</div>
            	</form>
	</c:when>
    	<c:otherwise>
       		<form action="/post" method="post" class="user">
                	<div class="form-group">
                        	<input type="text" class="form-control form-control-user" name="title" placeholder="Title">
                        </div>
                       	<div class="form-group">
        			<textarea class="form-control form-control-user" name="content"></textarea>
                        </div>
                        <div class="form-group">
                       		<input type="text" class="form-control form-control-user" name="name" placeholder="name">
                        </div>
                        <button type="submit" class="btn btn-primary btn-user btn-block">
                                        Register Post
                       	</button>
        	</form>
       	</c:otherwise>
</c:choose>
タグはjstl構文で、switch case文と似ています.
タグはjstl構文であり、switch caseではcaseと似ている.
タグはjstl構文であり、switch case文ではdefaultと似ています.

PostMapperインタフェースとxmlの変更


postを変更してidでpostを受信します.
public interface PostMapper {
    public void save(PostVO postVO);
    public List<PostVO> findAll();
    public PostVO findById(int id);
}
<mapper namespace="ac.kr.smu.mapper.PostMapper">
    <insert id="save">
        INSERT INTO post(title,content,created_date,name)
        VALUES(#{title},#{content},#{created_date},#{name})
    </insert>
    <select id="findAll" resultType="PostVO">
        SELECT * FROM post
    </select>
    <select id="findById" resultType="PostVO">
        SELECT * FROM post WHERE id=#{id}
    </select>
</mapper>

PostServiceの変更


同様に、IDを変更してPostVOを返します.
public interface PostService {
    public void save(PostVO postVO);
    public List<PostVO> findAll();
    public PostVO findById(int id);
}
@Service
public class PostServiceImpl implements PostService {
    @Autowired
    private PostMapper postMapper;

    public void save(PostVO postVO){
        postMapper.save(postVO);
    }

    @Override
    public List<PostVO> findAll() {
        return postMapper.findAll();
    }

    @Override
    public PostVO findById(int id) {
        return postMapper.findById(id);
    }
}
 	

PostControlの変更


@PathVariableを使用してpostのIDを受信し、モデルにPostVOを追加します.@リクエストにPathVariableがない場合は、「記事の合成」画面に戻ります.
@Controller
@RequestMapping("/post")
public class PostController {
    @Autowired
    private PostService postService;

    @GetMapping({"/{postId}",""})
    public String getPost(@PathVariable(value = "postId",required = false) Integer postId, Model model){
        if(postId != null)
            model.addAttribute("post",postService.findById(postId));
        
        return "post";
    }

    @PostMapping
    public String postPost(PostVO postVO){
        postService.save(postVO);
        return "board";
    }
}


@PathVariableは、urlから/post/1に要求された場合など、変数のセットです.パスは/{postId}として指定されているため、リクエストが/post/1の場合、1はpostIdとなります.requiredプロパティをfalseとして指定する場合は、そのプロパティを受け入れる必要はありません.

テスト