java - thymeleaf "Попытка репостить информацию, которая уже была создана" - PullRequest
0 голосов
/ 08 ноября 2018

Я создал приложение для создания постов в блоге. Сейчас я пытаюсь обновить приложение, чтобы сделать функциональность 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);

}

Я надеюсь, что кто-то может помочь мне с этим, я был бы очень признателен.

1 Ответ

0 голосов
/ 08 ноября 2018

В вашем файле editpost.html есть ошибка. Обратите внимание, что после нажатия кнопки «Изменить» URL вашего браузера равен

локальный: 8080 / блог / jfreynolds / @ {/ блог / editpost / $ {имя пользователя} / $ {UID}

вместо

локальный: 8080 / блог / editpost / jreynolds / 2

Просто добавьте " th: " перед своим href ниже, чтобы ваше выражение могло работать.

<a th:href="@{/blog/editpost/${username}/${uid}">Edit</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...