form.html
{{> include/header}}
{{> include/navigation}}
<div class="container" id="main">
<div class="col-md-12 col-sm-12 col-lg-10 col-lg-offset-1">
<div class="panel panel-default content-main">
<form name="question" method="post" action="/questions">
<div class="form-group">
<label for="title">제목</label>
<input type="text" class="form-control" id="title" name="title" placeholder="제목"/>
</div>
<div class="form-group">
<label for="contents">내용</label>
<textarea name="contents" id="contents" rows="5" class="form-control"></textarea>
</div>
<button type="submit" class="btn btn-success clearfix pull-right">질문하기</button>
<div class="clearfix" />
</form>
</div>
</div>
</div>
{{> include/footer}}
class QuestionController
package net.slipp.web;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import net.slipp.domain.Question;
import net.slipp.domain.QuestionRepository;
import net.slipp.domain.User;
@Controller
@RequestMapping("/questions")
public class QuestionController {
private static final Logger log = LoggerFactory.getLogger(QuestionController.class);
@Autowired
private QuestionRepository questionRepository;
@GetMapping("/form")
public String form(HttpSession session){
if(!HttpSessionUtils.isLoginUser(session)){
return "/users/loginForm";
}
return "/qna/form";
}
@PostMapping("")
public String create(HttpSession session, String title, String contents){
if(!HttpSessionUtils.isLoginUser(session)){
return "/users/loginForm";
}
log.info("create(String title, String contents) {} , {} ", title, contents);
User sessionUser =HttpSessionUtils.getUserFromSession(session);
Question newQuestion =new Question(sessionUser.getUserId(), title, contents);
questionRepository.save(newQuestion);
return "redirect:/";
}
}
interface QuestionRepository
package net.slipp.domain;
import org.springframework.data.jpa.repository.JpaRepository;
public interface QuestionRepository extends JpaRepository<Question, Long>{
}
class Question
package net.slipp.domain;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Question {
@Id
@GeneratedValue
private Long id;
private String writer;
private String title;
private String contents;
@Temporal(TemporalType.TIMESTAMP)
private Date datetime;
public Question() {
}
public Question(String writer, String title, String contents) {
this.datetime=new Date();
this.writer = writer;
this.title = title;
this.contents = contents;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContents() {
return contents;
}
public void setContents(String contents) {
this.contents = contents;
}
public Date getDatetime() {
return datetime;
}
public void setDatetime(Date datetime) {
this.datetime = datetime;
}
@Override
public String toString() {
return "Question [id=" + id + ", writer=" + writer + ", title=" + title + ", contents=" + contents
+ ", datetime=" + datetime + "]";
}
}
class HomeController
package net.slipp.web;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import net.slipp.domain.QuestionRepository;
@Controller
public class HomeController {
@Autowired
private QuestionRepository questionRepository;
@RequestMapping("/")
public String index(Model model){
model.addAttribute("questions", questionRepository.findAll());
return "index";
}
}
index.html
{{> include/header}}
{{> include/navigation}}
<div class="container" id="main">
<div class="col-md-12 col-sm-12 col-lg-10 col-lg-offset-1">
<div class="panel panel-default qna-list">
<ul class="list">
{{^ questions}}
<li>
<div class="wrap">
<div class="main text-center">
등록된 글이 없습니다.
</div>
</div>
</li>
{{/questions}}
{{#questions}}
<li>
<div class="wrap">
<div class="main">
<strong class="subject">
<a href="./qna/show.html">{{title}}</a>
</strong>
<div class="auth-info">
<i class="icon-add-comment"></i>
<span class="time">{{datetime}}</span>
<a href="./user/profile.html" class="author">{{writer}}</a>
</div>
<div class="reply" title="댓글">
<i class="icon-reply"></i>
<span class="point">8</span>
</div>
</div>
</div>
</li>
{{/questions}}
</ul>
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6 text-center">
<ul class="pagination center-block" style="display:inline-block;">
<li><a href="#">«</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li><a href="#">»</a></li>
</ul>
</div>
<div class="col-md-3 qna-write">
<a href="./qna/form.html" class="btn btn-primary pull-right" role="button">질문하기</a>
</div>
</div>
</div>
</div>
</div>
<!--login modal-->
<!--
<div id="loginModal" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h2 class="text-center"><img src="https://lh5.googleusercontent.com/-b0-k99FZlyE/AAAAAAAAAAI/AAAAAAAAAAA/eu7opA4byxI/photo.jpg?sz=100" class="img-circle"><br>Login</h2>
</div>
<div class="modal-body">
<form class="form col-md-12 center-block">
<div class="form-group">
<label for="userId">사용자 아이디</label>
<input class="form-control" name="userId" placeholder="User ID">
</div>
<div class="form-group">
<label for="password">비밀번호</label>
<input type="password" class="form-control" name="password" placeholder="Password">
</div>
<div class="form-group">
<button class="btn btn-primary btn-lg btn-block">로그인</button>
<span class="pull-right"><a href="#registerModal" role="button" data-toggle="modal">회원가입</a></span>
</div>
</form>
</div>
<div class="modal-footer">
<div class="col-md-12">
<button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
</div>
</div>
</div>
</div>
</div>
-->
<!--register modal-->
<!--
<div id="registerModal" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h2 class="text-center"><img src="https://lh5.googleusercontent.com/-b0-k99FZlyE/AAAAAAAAAAI/AAAAAAAAAAA/eu7opA4byxI/photo.jpg?sz=100" class="img-circle"><br>회원가입</h2>
</div>
<div class="modal-body">
<form class="form col-md-12 center-block">
<div class="form-group">
<label for="userId">사용자 아이디</label>
<input class="form-control" id="userId" name="userId" placeholder="User ID">
</div>
<div class="form-group">
<label for="password">비밀번호</label>
<input type="password" class="form-control" id="password" name="password" placeholder="Password">
</div>
<div class="form-group">
<label for="name">이름</label>
<input class="form-control" id="name" name="name" placeholder="Name">
</div>
<div class="form-group">
<label for="email">이메일</label>
<input type="email" class="form-control" id="email" name="email" placeholder="Email">
</div>
<div class="form-group">
<button class="btn btn-primary btn-lg btn-block">회원가입</button>
</div>
</form>
</div>
<div class="modal-footer">
<div class="col-md-12">
<button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
</div>
</div>
</div>
</div>
</div>
-->
{{> include/footer}}
댓글 ( 4)
댓글 남기기