Я создал приложение для создания постов в блоге. Сейчас я пытаюсь обновить приложение, чтобы сделать функциональность CRUD. Оригинальное приложение все еще работает, из которого я включил снимок экрана.
Домашний экран блога
Из их я могу войти и выйти или я могу создать новый пост. Когда я выбираю данное имя пользователя, он должен перечислять все сообщения по имени пользователя. Смотрите ниже:
Сообщения в блоге по имени пользователя
Отсюда я могу выбрать конкретную запись в блоге, которая подтянет эту запись в блоге по имени пользователя и ей. Кроме того, на этом экране я изменил лист тимьяна, чтобы разрешить мне редактировать запись в блоге или удалять запись в блоге. Смотрите ниже:
Запись блога по имени пользователя и идентификатору пользователя
Когда я нажимаю на правку, это результат этого действия. То, что я пытаюсь сделать, это передать информацию со страницы одного поста в новый шаблон тимелист и разрешить редактирование информации. После того, как отредактированная информация была сделана, нужно продолжить и заново сохранить информацию. см. ниже:
Редактирование сообщений блога по имени пользователя и идентификатору пользователя
Мне интересно, что я делаю не так. Я включу свой postcontroller.java, editpost.html, post.html, postdao.java.
package org.launchcode.blogz.controllers;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.launchcode.blogz.models.Post;
import org.launchcode.blogz.models.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class PostController extends AbstractController {
@RequestMapping(value = "/blog/newpost", method = RequestMethod.GET)
public String newPostForm() {
return "newpost";
}
@RequestMapping(value = "/blog/newpost", method = RequestMethod.POST)
public String newPost(HttpServletRequest request, Model model) {
// TODO - implement newPost
// get request parameters
String title = request.getParameter("title");
String body = request.getParameter("body");
// get user from their session
HttpSession newSession = request.getSession();
User author = getUserFromSession(newSession);
// validate parameters
// if valid, create new Post
// if not valid, send back to the form, with an error message
if (title == null || title.isEmpty()) {
model.addAttribute("error", "The title is missing from this post. Please enter a title.");
return "newpost";
}
if (body == null || body.isEmpty()) {
model.addAttribute("title", title);
model.addAttribute("error", "The body of the post needs some content. Please enter some content for this post.");
return "newpost";
}
// save the user's post
Post post = new Post(title, body, author);
postDao.save(post);
// TODO - this redirect should go to the new post's page
return "redirect:/blog/" + author.getUsername() + "/" + post.getUid();
}
@RequestMapping(value = "/blog/{username}/{uid}", method = RequestMethod.GET)
public String singlePost(@PathVariable String username, @PathVariable int uid, Model model) {
// TODO - implement singlePost
// get the given parameters
Post post = postDao.findByUid(uid);
// get the given post
// pass the post into the template
model.addAttribute("error", "");
model.addAttribute("post", post);
return "post";
}
@RequestMapping(value = "/blog/{username}", method = RequestMethod.GET)
public String userPosts(@PathVariable String username, Model model) {
// TODO - implement userPosts
// get all of the user's posts
User user = userDao.findByUsername(username);
List<Post> posts = user.getPosts();
// pass the posts into the template
model.addAttribute("posts", posts);
return "blog";
}
@RequestMapping(value = "/blog/editpost/{username}/{uid}", method = RequestMethod.GET)
public String editPostForm(@PathVariable String username, @PathVariable int uid, Model model){
return "editPost";
}
@RequestMapping(value = "/blog/editpost/{username}/{uid}", method = RequestMethod.POST)
public String editPost(HttpServletRequest request, @PathVariable String username, @PathVariable int id, Model model) {
// TODO - implement newPost
// get request parameters
String title = request.getParameter("title");
String body = request.getParameter("body");
// get user from their session
HttpSession newSession = request.getSession();
User author = getUserFromSession(newSession);
// validate parameters
// if valid, create new Post
// if not valid, send back to the form, with an error message
if (title == null || title.isEmpty()) {
model.addAttribute("error", "The title is missing from this post. Please enter a title.");
return "editPost";
}
if (body == null || body.isEmpty()) {
model.addAttribute("title", title);
model.addAttribute("error", "The body of the post needs some content. Please enter some content for this post.");
return "editPost";
}
// save the user's post
Post post = new Post(title, body, author);
postDao.save(post);
// TODO - this redirect should go to the new post's page
return "redirect:/blog/" + author.getUsername() + "/" + post.getUid();
}
// @RequestMapping(value = "/blog/deletepost")
// public String deleteByUid(@PathVariable("uid") long id, Model model) {
// String deleteSQL = "DELETE post WHERE uid = ${post.uid}";
// PreparedStatement preparedStatement = dbConnection.prepareStatement(deleteSQL);
// // execute delete SQL stetement
// preparedStatement.executeUpdate();
// return "index";
// }
}
приведенный выше код моего контроллера
следующий мой editpost.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org/">
<head th:replace="template :: dochead">
</head>
<body>
<div th:replace="template :: navigation"></div>
<h2>Edit Post</h2>
<form method="post" th:object="$[post}">
<label>
<div>title</div>
<input type="text" name="title" class="post-title" th:text="${post.title}"></input>"post-title" th:text="${post.title}"
</label>
<label>
<div>post</div>
<textarea name="body" class="post-body" th:text="${post.body}"></textarea>
</label>
<div class="error" th:text="${error}"></div>
<button type="submit">Save</button>
</form>
</body>
</html>
следующим сегментом кода будет мой post.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org/">
<head th:replace="template :: dochead">
</head>
<body>
<div th:replace="template :: navigation"></div>
<h2>A Single Post</h2>
<!-- TODO - display a single blog post -->
<h3 class="post-title" th:text="${post.title}"></h3>
<p class="post-body" th:text="${post.body}"></p>
<div class="error" th:text="${error}"></div>
<a href="@{/blog/editpost/${username}/${uid}">Edit</a>
<a href="/blog/deletepost">Delete</a>
<p class="footer">This post was created by <a th:href="'/blog/' + ${post.author.username}" th:text="${post.author.username}"></a> on the date <em><span th:text="${#dates.format(post.modified, 'yyyy-MM-dd hh:mm:ss')}"></span></em></p>
</body>
</html>
окончательный сегмент кода будет моим postdao.java
package org.launchcode.blogz.models.dao;
import java.util.List;
import javax.transaction.Transactional;
import org.launchcode.blogz.models.Post;
import org.launchcode.blogz.models.User;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Transactional
@Repository
public interface PostDao extends CrudRepository<Post, Integer> {
List<Post> findByAuthor(User authorId);
// TODO - add method signatures as needed
Post findByUid(int uid);
List<Post> findAll();
void deleteByUid(int uid);
}
Я надеюсь, что кто-то может помочь мне с этим, я был бы очень признателен.