我想在没有设置org.springframework.ui.Model的情况下访问thymeleaf中的contextPath。我在application.properties文件中配置了上下文路径
答案 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