我需要使用Thymeleaf为我的SPRING应用程序创建绝对URL

时间:2014-02-26 10:55:08

标签: java spring spring-mvc thymeleaf

我有一个SPRING应用程序直接在Java或Tomcat 7服务器上运行(使用spring boot)。我需要为几页(映射)创建绝对URL,以便可以通过电子邮件发送这些链接。

我认为这很简单,但现在看起来很难。我更喜欢100%用Thymeleaf编写的解决方案,但如果不可能,我当然可以从我的Java代码中为Thymeleaf提供一些变量。

有人在Thymeleaf之前解决了这个问题吗?

3 个答案:

答案 0 :(得分:3)

在我看来,您应该在属性文件中提供服务器URL,而不是在Thymeleaf中访问它。您可以通过在视图中访问Spring Bean来实现:

<div th:text="${@urlService.getApplicationUrl()}">...</div> 

在上面的例子中,urlService是一个Spring Bean。

请参阅此答案:https://stackoverflow.com/a/675903/718515

您可能还对#ctx变量感兴趣,该变量可让您访问servletContext。见Thymeleaf docuementation:http://www.thymeleaf.org/doc/html/Using-Thymeleaf.html#base-objects

我希望它有所帮助!

答案 1 :(得分:0)

我刚刚做了类似的事情,我使用Thymeleaf来生成HTML电子邮件(当然,链接必须是绝对的)。我使用了Thymeleaf的内置@{}链接语法来创建相对于服务器的相应URL(因为它调用了我需要做的HttpServletResponse.encodeURL(),因为我有一个自定义实现来做一些附加URL munging),然后使用Spring的ServletUriComponentsBuilder使用HttpServletRequest服务器信息使URL绝对。

<p th:with="
    relativeCustomerInfoPath=@{|/my/path/${customer.code}/info/|},
    customerInfoPath=${T(org.springframework.web.servlet.support.ServletUriComponentsBuilder).fromContextPath(#httpServletRequest).replacePath(relativeCouponPath).toUriString()}">
  Go see your info at 
  &lt;<a th:href="${customerInfoPath}" th:text="${customerInfoPath}">Link</a>&gt;.
</p>

可能有一种更好的方法,但这对我来说效果很好,并且完全在Thymeleaf中制作了URL(尽管使用了Spring的库)。

答案 2 :(得分:0)

今天我进行了一次集成,建议使用完整的Url来兼容。

  
      
  • 基数应根据环境而变化(我只是将其作为属性发送)。

  •   
  • 最后一个@ {/ js / i / dyn}是获取contextPath。

  •   
<script th:src="${'https://' + base} + @{/js/i/dyn}"></script>

参考:http://www.thymeleaf.org/doc/articles/standardurlsyntax.html