如何在Thymeleaf中访问contextPath?

时间:2017-03-22 07:12:19

标签: spring-boot thymeleaf

我想在没有设置org.springframework.ui.Model的情况下访问thymeleaf中的contextPath。我在application.properties文件中配置了上下文路径

4 个答案:

答案 0 :(得分:6)

如果您使用的是Thymeleaf,您应该可以使用

<a th:href="@{/XXX}">Link Name</a> 

假设已经宣布。

我认为这需要使用SpringTemplateEngine。

答案 1 :(得分:5)

网址表达式@{/}为您提供完整的背景信息...例如,如果您有:

# application.properties
server.contextPath=/your/context

然后你可以使用

<div th:text="@{/}" />
or
<div th:text="${#request.contextPath}" />
both of which will output
<div>/your/context/</div>

答案 2 :(得分:0)

您可以使用@ConfigurationProperties从application.properties获取上下文路径,其中包含AppProperties.java等属性的新类。

然后,您可以在要设置ThymeLeaf参数的类中自动装配此属性类,然后在Thymeleaf上下文中设置此参数,并在html文件中相应地获取它。

@Configuration
@ConfigurationProperties(prefix = "com.test")
public class AppProperties{

private String contextPath;
}

在模板引擎中设置

@Service
public class MailContentBuilder {

private TemplateEngine templateEngine;

@Autowired
public MailContentBuilder(TemplateEngine templateEngine) {
    this.templateEngine = templateEngine;
}

public String build(CodeRequest codeRequest, String lang) {
    Context context = new Context();
    context.setVariable("footerFile", "footer_" + lang);
    context.setVariable("customerInfo", codeRequest);
    context.setVariable("imageLogo", "cid:" + Constants.LOGO);
    context.setVariable("imageBorder", "cid:" + Constants.LEFT_BORDER);
    context.setVariable("imageFooter", "cid:" + Constants.LOGO_FOOTER);
    return templateEngine.process("template", context);
}
}

HTML更改:

<div th:replace="${contextPath}"></div>

答案 3 :(得分:0)

如果你需要Javascript中的contextPath,你可以这样做:

<!--
  th:inline="javascript" prepares the script to allow "JSON data injection"
  via [[${modelParameterName}]] or [[@{urlPath}]].
  This is called "JavaScript natural templates" in Thymeleaf.
  By using comments around the part to be inlined we can provide default values.
-->
<script th:inline="javascript">
  const contextpath = /*[[@{/}]]*/ "/";
  // ... do something with contextPath, e.g., use it with axios ...
</script>

在这里我们看到我们想要将 [[@{/}]] 内联到 JavaScript,它指的是我们的 Web 应用程序的根(即 contextPath)。


Thymeleaf 文档:JavaScript natural templates