gpt4 book ai didi

java - Spring Boot 与 Thymeleaf - 空上下文

转载 作者:行者123 更新时间:2023-12-02 13:12:56 25 4
gpt4 key购买 nike

我的(非常基本的)jsp 看起来像这样:

<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Comment proposal</title>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous" />
<!-- Latest compiled and minified JavaScript -->
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
crossorigin="anonymous"></script>
<link rel="stylesheet" href="../static/css/common.css"/>
</head>
<body>
<div>
<div>
<div>
<h1 class="text-primary text-center" th:text="${p.getTitle()}"></h1>
<div>
<div>
<h2>Content:</h2>
<h3 th:text="${p.getContent()}"></h3>
</div>
</div>
<div>
<div>
<h3>Comments:</h3>
<div>
<table class="table">
<tr th:each="c : ${p.getComments()}">
<td><div>
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-muted" th:text="${c.getUser().getName()}"></span>
</div>
<div class="panel-body">
<p th:text="${c.getContent()}"></p>
</div>
</div>
</div></td>
<td><a th:href="${'/upvoteComment/' + p.getId()}"
class="btn btn-info" th:proID="${p.getId()}">Me Likey</a></td>
<td><a th:href="${'/downvoteComment/' + p.getId()}"
class="btn btn-info" th:proID="${p.getId()}">Nu-uh</a></td>
</tr>
</table>
</div>
</div>
<div th:with="idProposal=${p.getId()}">
<h3>Add comment</h3>
<form role="form" th:action="@{/createComment/} + ${idProposal}"
th:object="${createComment}" method="POST">
<textarea class="form-control" rows="3" id="contentInput"
th:field="*{content}" placeholder="Comment"></textarea>
<button value="Comment" type="submit" class="btn btn-info"
id="SubmitComment">Submit</button>
</form>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

我的 Controller 提供以下服务:

@RequestMapping("/commentProposal/{id}")
//move to commentProposal.html
public String commentProposal(@PathVariable("id") String id, Model model){
new ProposalDao();
Proposal p = ProposalDao.GetProposalByID(Integer.parseInt(id));
ModelAndView mav = new ModelAndView("commentProposal");
model.addAttribute("p", p);
mav.addObject("p", p);
return "commentProposal";
}

我尝试过返回 mav 对象,以及将该对象添加到传递的模型中。但无济于事,每当我进入页面时,我都会得到

Exception evaluating SpringEL expression: "p.getTitle()" (commentProposal:22)

maven 窗口显示“尝试在 null 上下文对象上调用 getTitle() 方法”

我一定看过无数的教程,我就是不明白我做错了什么。在任何前端成为一个完全的菜鸟也没有帮助!

谢谢!

最佳答案

您可以使用 Spring 的依赖注入(inject)来查找您的 DAO。这可以通过 Autowiring 简单地完成(对于 Java,@Inject):

@RequestMapping("/commentProposal/{id}")
public String commentProposal(@PathVariable("id") Integer id,
Model model) {
model.addAttribute("p", proposalDao.findOne(id));
return "commentProposal";
}

@Autowired
private ProposalDao proposalDao;

将其命名为findOne。如果您以后使用 Spring Data,这将使您更容易。另请注意,Spring 可以自动转换类型,因此无需解析您的 Integer

更改您的 HTML 模板以匹配您在 Thymeleaf 文档中看到的内容:

<h1 class="text-primary text-center" th:text="${p.title}"></h1>

并将您的方法名称更改为驼峰式大小写(按照惯例,并且为了下一个人阅读您的代码的理智)。

关于java - Spring Boot 与 Thymeleaf - 空上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43887710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com