0

我有一个使用 SpringMVC 和 Thymeleaf 的 spring boot 项目。我在包含在每个页面上的 layout.html 中定义了一个页脚。无论如何要在该页脚上包含一个显示每个页面的“状态”的调用。这样当您浏览网站时,页脚总是会显示所需的信息?

我有一个放置状态对象的 REST 控制器:

@Controller
public class StatusController {

@RequestMapping(value = "/status", method = RequestMethod.GET)
public String get(Model model) {

    Status status = new Stauts;
    LocalDate lastUpdate = statusRepository.findByLastUpdate();
    ...
     // do some work to update the status object
    model.addAttribute( STATUS, status );
    return "status";
}

我的 footer.html 中有一个定义:

  <div th:fragment="foot">
    <div id="footer">
        <div class="container">
            <p class="muted credit">
            <form action="refreshData" th:action="@{/status}" method="get"></form>
            Last update status: <span th:text="${status.status}" class="text-info"></span>
            </p>
        </div>
    </div>
</div>

然后每个页面都包含如下页脚:

...

<div th:include="layout :: foot"></div>

</body>

我在我的控制器中放置了一个断点并且它没有被调用,并且我总是在页面加载时得到这个异常:

org.springframework.expression.spel.SpelEvaluationException: EL1007E:(pos 0): 在 null 上找不到属性或字段“状态”

我想知道控制器是否永远不会被调用,因为我必须使用像 jQuery 这样的东西来进行 Ajax 调用,或者因为我的 layout.html 中有这个并且包含不调用(这似乎不太可能)?

4

2 回答 2

1

在 Spring MVC 中,每个页面/调用只有一个控制器。您不能一次调用多个控制器。我相信这是你的问题。

您有多种可能性:

  • 您必须自己将此状态变量合并到每个控制器中。

  • 创建一个ControllerAdvice,准备模型属性状态并应用于每个控制器(默认)

  • 在页脚中使用服务调用来获取状态,例如: th:text="${@statusService.status}"

我个人喜欢这种全球可用信息的服务方法。

于 2014-10-13T09:16:42.127 回答
0

当前的:

<span th:text="${status.status}" class="text-info">

改成

<span th:text="${status}" class="text-info">

这将显示空

在控制器中,您设置了 Status status = null; 并在模型映射中将其设置为属性状态”。因此 ${status} 被评估为 null(这不过是 model.get("status"))。${status.status} 将为 null.status 。导致在 null 上找不到“状态”

于 2014-10-09T14:52:25.890 回答