使用Thymeleaf th:href生成BIRT报表绝对URL遇解析异常求方案
解决Thymeleaf th:href生成BIRT报表URL的解析异常问题
你遇到的解析异常主要是因为在Thymeleaf的@{}语法中错误地直接拼接参数,同时参数值里的空格没有正确处理导致的。下面给你两种可靠的解决方案:
推荐方案:使用Thymeleaf内置的参数语法
Thymeleaf的URL语法支持将参数放在括号内,它会自动帮你处理URL编码、参数拼接和转义,完全避免手动拼接的错误:
<td> <a th:href="@{http://localhost:8081/birt/frameset( __report='report/bordereau_emission.rptdesign', __title='Bordereau Emission', __locale='fr_FR', __format='html', __masterpage='true', IdBE=${bordereauEmission.idBe} )}">Visualiser</a> </td>
为什么这个方案有效:
- 自动处理参数值中的特殊字符(比如把
Bordereau Emission里的空格转成%20) - 自动用
&分隔参数,不需要手动写& - 语法更清晰,减少拼写错误的概率
备选方案:手动拼接并处理编码
如果你偏好手动拼接URL,需要确保对特殊字符编码,同时正确转义&:
<td> <a th:href="@{http://localhost:8081/birt/frameset?__report=report/bordereau_emission.rptdesign&__title=__${#strings.urlEncode('Bordereau Emission')}__&__locale=fr_FR&__format=html&__masterpage=true&IdBE=${bordereauEmission.idBe}}">Visualiser</a> </td>
这里用#strings.urlEncode()方法对包含空格的参数值进行编码,同时用&代替&来符合HTML语法规范,避免解析异常。
原代码的问题总结:
__title=Bordereau Emission中的空格未编码,会导致URL格式错误- 在Thymeleaf的
@{}中直接使用&,会被解析器误判为语法的一部分,引发异常 - 原生
href和th:href共存虽然不会直接报错,但容易混淆,建议保留th:href即可
内容的提问来源于stack exchange,提问作者Ibsea
相关产品推荐
相关产品推荐

