我想显示在运行时使用参数生成的绝对url。不是为页面创建href,而是使用th: text
显示URL。Tymeleaf有什么简单的方法可以做到这一点(无需连接来自#request对象的URL片段,也无需使用MVC工具类)?
尝试1
尝试2
th: text="@{__${#httpServletRequest.request estURI}__}"
-生成当前页面的相对URI,不包含协议等
尝试3
th: text="@{__${#httpServletRequest.request estURL}__}"
-这次生成包含协议,主机和servlet上下文的当前页面的绝对URL。现在的问题是,当我从不同的页面显示此文本时,我的URL是…myApp/my其他Servlet
所以我需要编辑此字符串以将my其他Servlet
替换为我想要的URI。
非Tymeleaf尝试1
@Service("urlUtils")
public class UrlUtilsServiceImpl implements UrlUtilsService {
@Override
public String getAbsoluteUrlTo(final String aPath, final String param, final String value){
return ServletUriComponentsBuilder
.fromCurrentContextPath()
.path(aPath)
.queryParam(param, value)
.build().toString();
}
}
page. html:
th:text="${@urlUtils.getAbsoluteUrlTo('/myServlet', 'myParam', ${dynamicParameter})}"
问题是主机名在到达我的服务器之前可以被别名(见此)。ThymeleafJS解决方案
使用一些java脚本加上胸腺
<p id="myUrl" th:text="@{/myServlet(myParam=${dynamicParameter})}" />
<script type="text/javascript">
$(document).ready(function () {
var myUrl= $("#myUrl");
myUrl.text(window.location.origin + myUrl.text());
});
</script>
您可以即时连接servlet请求:
th:text="${#httpServletRequest.scheme}+'://'+${#httpServletRequest.serverName}+':'+${#httpServletRequest.serverPort}+@{/myServlet(myParam=${dynamicParameter})}"
或者对于JavaScript:
<script type="text/javascript">
GLOBAL.serverURI = '[[${#httpServletRequest.scheme}+'://'+${#httpServletRequest.serverName}+':'+${#httpServletRequest.serverPort}+@{/myServlet(myParam=${dynamicParameter})}]]';
</script>