喜欢/不喜欢Spring Boot和Thymeleaf的功能

时间:2018-02-28 16:44:04

标签: java spring-boot thymeleaf

我的Thymeleaf模板中有一个表格,显示数据库数据。我还有两列,每行包含Like和Dislike按钮。我想启用喜欢/不喜欢"帖子"。我的想法是通过更新数据库实体来简单地增加数据库中的Like / Dislike计数。所以,在我的模板中,我得到了这个:

<table id="css-serial" class="table table-striped table-inverse">
    <tbody>
    <tr>
        <th>#</th>
        <th>Kategorija</th>
        <th>Vic</th>
        <th>Likes</th>
        <th>Dislikes</th>
        <th>Razlika</th>
        <th>Like</th>
        <th>Dislike</th>
    </tr>
    <tr th:each="joke : ${jokes}">
        <form method="POST" th:object="${updateJoke}" th:action="@{/}">
        <td></td>
        <td> <pre th:text="${joke.getCatName()}"></pre> </td>
        <td> <div class="preforma" th:text="${joke.getContent()}" th:field="*{content}"></div> </td>
        <td th:text="${joke.getLikes()}" th:field="*{likes}"></td>
        <td th:text="${joke.getDislikes()}" th:field="*{dislikes}"></td>
        <td th:text="${joke.likesDislikesSubtraction()}"></td>
        <td><input type="submit" value="Svidja mi se" name="like"/></td>
        <td><input type="submit" value="Ne svidja mi se" name="dislike"/></td>
        </form>
    </tr>
    </tbody>
</table>

控制器GET和POST方法:

@RequestMapping(value="", method=RequestMethod.GET)
public String showJokes(Model model){
    model.addAttribute("jokes", jokeService.listAllJokes());
    return "jokestable";
}

@RequestMapping(params="like", method=RequestMethod.POST)
public String likeJoke(Joke joke, Model model){

    model.addAttribute("updateJoke", joke);
    jokeService.likeJoke(joke);
    return showJokes(model);
}

@RequestMapping(params="dislike", method=RequestMethod.POST)
public String dislikeJoke(Joke joke, Model model){

    model.addAttribute("updateJoke", joke);
    jokeService.dislikeJoke(joke);
    return showJokes(model);
}

服务层中的相关方法:

public void likeJoke(Joke joke){
    jokeRepository.likeJoke(joke.getContent());
}

public void dislikeJoke(Joke joke){
    jokeRepository.dislikeJoke(joke.getContent());
}

存储库:

public interface JokeRepository extends CrudRepository<Joke, Long> {

Joke findByContent(String content);

@Modifying
@Query("UPDATE Joke j SET j.likes = j.likes+1 WHERE j.content=:content")
void likeJoke(@Param("content") String content);

@Modifying
@Query("UPDATE Joke j SET j.dislikes=j.dislikes+1 WHERE j.content=:content")
void dislikeJoke(@Param("content") String content);
}

这显然不起作用,每次我点击Like按钮时都没有任何反应,但是当我去IntelliJ时,我看到&#34;请求方法&#39; GET&#39;不支持&#34; (刷新后第一次为每个按钮显示两次,然后每次下一次,只显示一次)。这个解决方案是否可行,或者我必须改变我的方法?有什么想法吗?

P.S。服务类使用@Transactional

注释

如果有人想知道为什么我

return showJokes(model);

它是因为如果我返回模板名称,当我点击按钮时它不再显示数据库数据,那时只有空表(只有第二个元素)。

我认为可能的问题可能是每行的每个Like按钮都被命名为相同,以及Dislike按钮。但我不知道如何解决这个问题。

0 个答案:

没有答案