当前位置: 首页 > 知识库问答 >
问题:

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

解博明
2023-03-14

我最近开始使用Spring.io和Spring Boot进行开发,并将Thymeleaf集成到我的web应用程序中。我现在正在尝试使用mvc.uri实现反向路由,但似乎无法使其工作。

package com.twlab.billigalan.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder;

@Controller
public class HomeController {

    @RequestMapping("/")
    @ResponseBody
    public ModelAndView home() {
        //String url = MvcUriComponentsBuilder.fromMappingName("HousingLoansController#main").build();
        ModelAndView model = new ModelAndView();
        //model.addObject("url",url);
        model.setViewName("pages/main/home");
        return model;
    }

    @RequestMapping("/server-error")
    public String error(HttpServletRequest request, Model model) {
        model.addAttribute("errorCode", request.getAttribute("javax.servlet.error.status_code"));
        Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception");
        String errorMessage = null;
        if (throwable != null) {
          errorMessage = throwable.getMessage();
        }
        model.addAttribute("errorMessage", errorMessage);
        return "pages/main/error.html";
    }
}

这是一个视图:

<html
xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorator="layouts/master.layout">
<head>
    <title>Billiga lån</title>
</head>
<body class="home">
    <div class="panel-body" layout:fragment="content">
        <a th:href="#{mvc.uri('HomeController#home').build()}">Test</a>
    </div>
</body>
</html>

这是主布局:

<!DOCTYPE html>
<html lang="sv"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:th="http://www.thymeleaf.org"
    xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link href="http://cdn.jsdelivr.net/webjars/bootswatch-sandstone/3.3.2/css/bootstrap.min.css"
    th:href="@{/webjars/bootswatch-sandstone/3.3.2/css/bootstrap.min.css}"
    rel="stylesheet" media="screen" />
    <link rel="stylesheet" type="text/css" href="static/css/main.css" th:href="@{/css/main.css}" />
    <link rel="shortcut icon" href="static/favicon.ico" th:href="@{/favicon.ico}" />
    <title>Billiga lån</title>
</head>
<body>
<div id="wrapper" class="container">
    <div id="header" class="row">
        <div class="col-md-4">
            <a href="/" id="logo">Billiga lån</a>
            <span id="tagline">Billigaste lånen hittar du här!</span>
        </div>
        <div class="col-md-8"></div>
    </div>
    <!-- navbar -->
    <div class="navbar navbar-default" role="navigation">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed"
                    data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="sr-only">Visa meny</span> <span class="icon-bar"></span>
                    <span class="icon-bar"></span> <span class="icon-bar"></span>
                </button>
                <a href="/" class="navbar-brand frontpage"><i class="glyphicon glyphicon-home"></i></a>
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav navbar-left">
                    <li>
                        <a href="#">Låna pengar snabbt</a>
                    </li>
                    <li>
                        <a th:href="#{mvc.uri('HousingLoansController#main').build()}">Bolån</a>
                    </li>
                    <li>
                        <a href="#">Bil-lån</a>
                    </li>
                </ul>
            </div>
        </div>
    </div>
    <div id="main">
        <div id="sidebar" class="col-md-2 panel panel-default" layout:fragment="sidebar">
            <div class="panel-heading">Snabbstart</div>
            <div class="panel-body">
                <aside id="nav_menu-2" class="widget widget_nav_menu">
                    <div class="menu-sidomeny-container">
                        <ul id="menu-sidomeny" class="menu">
                            <li><a href="#">Låna pengar snabbt</a></li>
                            <li><a href="#">Lån med betalningsanmärkning</a></li>
                            <li><a th:uri="mvcUrl('HousingLoansController#main')">Bolån</a></li>
                            <li><a href="#">Bil-lån</a></li>
                        </ul>
                    </div>
                </aside>
            </div>
        </div>
        <div id="content" class="col-md-8">
            <div class="panel panel-default">
                <div class="panel-body" layout:fragment="content">

                </div>
                <!-- /panel-body -->
            </div>
            <!-- /panel -->
        </div>
        <!-- /#content -->
        <div id="right-sidebar" class="col-md-2 panel panel-default">
            <div class="panel-body" layout:fragment="right-sidebar">

            </div>
        </div>
    </div>
    <!-- /#main -->
</div>
<!-- /container -->
<div id="pre-footer">&nbsp;</div>
<!-- /pre-footer -->
<div id="footer"></div>
<!-- /footer -->
    <script src="http://cdn.jsdelivr.net/webjars/jquery/2.1.4/jquery.min.js"
        th:src="@{/webjars/jquery/2.1.4/jquery.min.js}"></script>
    <script src="http://cdn.jsdelivr.net/webjars/bootswatch-sandstone/3.3.2/js/bootstrap.min.js"
        th:src="@{/webjars/bootswatch-sandstone/3.3.2/js/bootstrap.min.js}"></script>
</body>
</html>

这是从布局(HousingLoansController)引用的控制器:

package com.twlab.billigalan.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HousingLoansController {

    @RequestMapping("/bolan")
    public ModelAndView main() {
        ModelAndView model = new ModelAndView();
        model.addObject("quickstart",null);
        model.setViewName("pages/housing-loans/housing-loans");
        return model;
    }
}

这是错误消息:

共有1个答案

曹育
2023-03-14

看一下这里的例子。#mvc是表达式对象,因此必须从thymeleaf表达式中访问,例如:

<a th:href="${#mvc.url('HomeController#home').build()}">Test</a>

请注意,#mvc包含在${...}符号中并从其中引用。

 类似资料:
  • 有的安全措施起作用,有的不起作用。 如果我的html文件中包含以下内容: 结果是: (->但它不起作用,因为每个人都可以一直看到它) (->按预期工作) (->有效) (->正确) 正如你所看到的,其他人根本没有出现。 html标记如下所示: 我的pom.xml具有以下依赖关系: 我的SecurityConfig如下所示: 所以基本上只要和角色没有任何关系,一切都是正常的。如果它是基于角色的,那么

  • 我有一个Spring启动1.5.9项目,我试图得到thymeleaf布局方言模板工作。 我遵循这里给出的例子 https://ultraq.github.io/thymeleaf-layout-dialect/Examples.html 我已经创建了一个布局。使用以下代码创建html 和一个内容2。包含以下内容的html 我的控制器看起来像 当我访问root我得到一个页面返回只有html从cont

  • 我的应用程序后端使用Spring Boot,前端使用Angular JS。 我使用Thymeleaf来支持多语言。Thymeleaf要求将所有html文件放在名为templates的文件夹下。 在前端,我使用angular的routeProvider重定向页面。代码如下: 在java端,我的WebConfig中有一些ViewController代码。JAVA 登录页面可以工作,但对于仪表板,Ang

  • 问题内容: 我有以下课程: :和: :但是当我用: :我收到错误消息: :有人能对此有所启发吗? 问题答案: 从那以后我就知道了。您需要先运行: java -DoutputDirectory =。-cp。; activejdbc-instrumentation.jar; javassist.jar; activejdbc.jar; activejdbc.instrumentation.Main

  • 我现在正在尝试复制一个名为的数据库。在MySQL命令行客户机中,我正在执行我得到错误消息: 说吧,告诉我我很蠢。我只是需要一些帮助,拜托。