Thymeleaf 和 Spring MVC 电流控制器和动作

Posted

技术标签:

【中文标题】Thymeleaf 和 Spring MVC 电流控制器和动作【英文标题】:Thymeleaf & Spring MVC Current Controller & Action 【发布时间】:2016-04-19 19:43:45 【问题描述】:

我的一个百里香模板中有一些导航。

<li class="active"><a th:href="@/">Home</a></li>
<li class=""><a th:href="@/about">About</a></li>
<li class=""><a th:href="@/contact">Contact</a></li>

我要做的是设置我们所在的当前导航项的活动类。来自 grails 世界的我们可以轻松做到这一点,因为在 GSP 中有两个非常重要的变量可供我们使用。

$controllerName
$actionName

现在我知道我可以在 Spring MVC 控制器中手动设置这些变量并将它们传递给视图,但这似乎不是一个好的解决方案。

@Controller
@RequestMapping("/about")
public class AboutController 

    @RequestMapping("/")
    public String home(Model model) 
        model.addAttribute("controllerName", "about");
        model.addAttribute("actionName", "home");        
        return "about/home";        
    


还有其他方法吗?

【问题讨论】:

这里描述了我知道的不是基于自定义变量的唯一方法:***.com/questions/10852131/…。但这仍然是一种手动方式。 我就是这么想的。我正在使用这样的东西,但我只是在检查是否有更简单的方法。我可能会尝试创建一个基本拦截器并为每个请求添加 2 个变量。 好吧,恐怕在 Grails 中没有类似的东西。此外,我不确定&lt;li class="dropdown" th:class="$#httpServletRequest.requestURI.contains('/admin/') ? 'dropdown active' : 'dropdown'&gt; 是否比简单地使用一些自定义模型属性更清晰。但这只是一种意见。 【参考方案1】:

我使用页面模板本身中设置的变量编写了一个不同的解决方案。

请看这里:Is it possible to pass parameters to layout in thymeleaf layout-dialect?

我的home.html 文件将等同于您的about/home 模板。我设置了一个变量 (currentPage) 使其可用于所有其他包含。

它仍然是一种手动方法,如我的fragments/header.html 文件中所示,但至少所有逻辑都保留在模板端。

您可以为此争论任何一种情况,因为控制器决定为每个页面使用哪个模板。但这是一个简单的解决方案,您不必为了跟踪要突出显示的导航元素而不断将此数据添加到模型中。

【讨论】:

以上是关于Thymeleaf 和 Spring MVC 电流控制器和动作的主要内容,如果未能解决你的问题,请参考以下文章

Thymeleaf 和 Spring MVC 的表单参数为空

Spring MVC 和 Thymeleaf 资源版本控制

Thymeleaf (Java Spring):无法让 mvc.uri 工作

Spring MVC 和 Thymeleaf 自定义错误消息类型转换

Spring MVC、Tiles2、ThymeLeaf 和自然模板

Spring MVC thymeleaf 随机崩溃