我的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按钮。但我不知道如何解决这个问题。