解决Thymeleaf的地震震中距离展示[[]]双引号报错的问题

news2025/1/19 10:28:44

目录

前言

一、问题场景还原

1、需求场景

2、系统设计

3、功能实现

4、线数据标注展示

5、页面出错

 二、解决Thymeleaf报错

1、错误说明

2、参数改造

3、问题修复 

总结 


前言

        今天是2024年2月12日,农历正月初三,还是农历龙年春节。在这里首先给各位朋友们拜年,衷心祝福所有从事IT的技术朋友以及身边所有亲人好友新春快乐,欢度春节,祝福朋友们新年所愿皆所成,工作顺利,万事如意。

        言归正传,之前在博客中介绍了如何基于SpringBoot环境下进行地震影响范围的可视化展示,基于SpringBoot和PostGIS的震中影响范围可视化实践,在这个技术框架中,前端和后端暂时没有分离,采用的是传统的单体化架构,前端渲染引擎采用的是Thymeleaf框架。关于Thymeleaf的知识,这里不想占用过多篇幅,对于Thymeleaf不熟悉的,可以自行某度进行查找相关资料。如果在项目中,您用不到Thymeleaf框架,那么您可以忽略本文。

        本文主要讲解在使用SpringBoot单体化框架开发时,前端渲染引擎采用Thymeleaf时,在展示[[]]等二维数组时,遇到的后台解析错误的问题,以及怎么解决这种问题的办法。如果您也碰到此类问题,不妨看看博主的这篇博文。

一、问题场景还原

        本节主要介绍问题的使用场景,以及如何进行相关功能的设计与开发,采用什么组件进行可视化,最后介绍在开发的过程中遇到的实际问题。

1、需求场景

        在之前的博客中,我们已经将震中位置,以及震中5公里范围内的行政点位按照距离进行红色、黄色、绿色三色标记,在地方各应急部门进行应急救灾是可以有一个明显的参考。根据不同级别进行抢险救灾,如下图所示:

        但是上图少年宫却存在一个明显的问题,即没有将震中与行政点位的距离进行直观的标注。应急管理部门需要将震中位置与行政村点位进行直线连接,以及直线距离的标注。那么满足以上的需求需要如何实现呢?

2、系统设计

        为了满足上述需求,我们依然需要使用canvas的文本标注组件,这里与点位不同,还需要进行线即Polyline的矢量动态标注与展示。将震中位置和行政村点位进行直线连接,然后使用Leaflet.canvaslabel.js组件进行标注展示。

3、功能实现

        在明确的相关的调用组件后,我们来进行功能实现。在之前的代码中,我们将所有的地震信息以及5公里范围的行政村点位信息进行了返回。后台接口如下:

/**
 * 震中位置5公里分析
 * @param lng 经度
 * @param lat 纬度
 * @return
 */
 @PostMapping("/villageinfo")
 @ResponseBody
 public AjaxResult earthinfo(String lng,String lat){
      List<EarthquakeVillageVo> list = earthquakeInfoService.findListByLngLat(lng, lat);
      AjaxResult ar = AjaxResult.success();
      ar.put("data", list);
      return ar;
 }

        接口返回数据参考如下:

{
    "dist": 4205.20185904,
    "address": "山西省忻州市繁峙县繁城镇三祝村委会",
    "villageName": "三祝村委会",
    "lng": "113.254811799999999",
    "lat": "39.233503960000000"
}

4、线数据标注展示

        关于如何在Leaflet中展示线数据,网上或者Leaflet的官网有很多成熟的例子,因此这里不再进行赘述。这里重点讲解相关代码的实现,关键代码如下:

        线数据的定义以及添加到LayerGroup中:

L.polyline([[[lat, lng],[info.lat, info.lng]]], {
   			labelStyle: {
   				text: _dist + "千米",
   				zIndex: 0,
   				collisionFlg: false,
   				textAlign:'center',
   				strokeStyle :strokeStyleSet
   			},
   			//color: '#fe57a1',
   			color : strokeStyleSet
   	}).addTo(showLayerGroup);

        在正常情况,将上述代码添加到地图后,即可实现相关数据的可视化展示。我们来看下效果吧。

5、页面出错

         将程序部署运行起来后,再次打开页面,我们发现页面出现了空白,如下所示:

        然后按F12打开控制台,我们发现如下错误:

        同时在程序后台我们也能发现如下错误:

        我们发现后台的控制台也报错了,异常信息如下:

23:05:34.087 [http-nio-8080-exec-24] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - [log,175] - Servlet.service() for servlet [dispatcherServlet] in context with path [/earthqadmin] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/earthquake/mapview/map.html]")] with root cause
org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: "[lat, lng],[info.lat, info.lng" (template: "earthquake/mapview/map" - line 305, col 23)
	at org.thymeleaf.standard.expression.StandardExpressionParser.parseExpression(StandardExpressionParser.java:131)
	at org.thymeleaf.standard.expression.StandardExpressionParser.parseExpression(StandardExpressionParser.java:62)
	at org.thymeleaf.standard.expression.StandardExpressionParser.parseExpression(StandardExpressionParser.java:44)
	at org.thymeleaf.engine.EngineEventUtils.parseAttributeExpression(EngineEventUtils.java:220)
	at org.thymeleaf.engine.EngineEventUtils.computeAttributeExpression(EngineEventUtils.java:207)
	at org.thymeleaf.standard.processor.AbstractStandardExpressionAttributeTagProcessor.doProcess(AbstractStandardExpressionAttributeTagProcessor.java:125)
	at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74)
	at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95)
	at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633)
	at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1314)
	at org.thymeleaf.engine.OpenElementTag.beHandled(OpenElementTag.java:205)

         由于篇幅有限,这里不将所有异常贴出,让各位看到的是,在这里出现了模板引擎渲染时解析问题。在Thymeleaf中,对线等位置信息进行展示时抛出了异常。

 二、解决Thymeleaf报错

        这里将重点介绍如何解决Thymeleaf报错的问题,实现Leaflet中Polyline对象的时空位置加载可视化。将震中位置和行政村位置进行展示。

1、错误说明

        众所周知,在Thymeleaf当中,[[]]中的[]通常表示参数解析的意思,因此其默认会调用后台的模板引擎进行参数的渲染,而这里并不想调用解析过程,只是将Polyline对象正确的构造出来,保留数组的独立性。所以,问题的根源在于Thymeleaf的渲染机制问题,对于[]的解析。

        在遇到问题之后,大致搜集了一些解决办法,有的是有用的,有一些是没有作用。这里将本文实践可用的一种方案进行展示。

2、参数改造

        这里博主采用一种将[[]]拆开展示的方法,由于Thymeleaf会将[]进行解析渲染,故而将其分而治之,不将两个[[]]放在一行,即可规避这种问题。具体代码如下所示:

L.polyline(
   		[
   			[
   				[lat, lng],[info.lat, info.lng]]], {
   				labelStyle: {
   					 text: _dist + "千米",
   					 zIndex: 0,
   					 collisionFlg: false,
   					 textAlign:'center',
   					 strokeStyle :strokeStyleSet
   				},
   				//color: '#fe57a1',
   				color : strokeStyleSet
   		}).addTo(showLayerGroup);

3、问题修复 

        将上述代码进行改造后,再次刷新页面运行以下功能,发现页面正常运行,如下所示:

        最后给一张动图展示效果:

总结 

        以上就是本文的主要内容,本文主要讲解在使用SpringBoot单体化框架开发时,前端渲染引擎采用Thymeleaf时,在展示[[]]等二维数组时,遇到的后台解析错误的问题,以及怎么解决这种问题的办法。如果您在实践中发现有更好的办法,欢迎在评论区告知,行文仓促,难免有不当之处,如有不足,欢迎各位朋友在评论区批评指正。

参考:

1、Thymeleaf中使用二维数组[[]]报错

2、thymeleaf 会对 js 的字符转义,包括 for 循环里的字符,导致报错

3、thymeleaf 使用javascript定义数组报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1447405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu快速安装miniconda

ubuntu快速安装miniconda 环境 ubuntu.22.04 显卡 RTX 3050 关于选择Miniconda还是Anaconda的问题&#xff0c;Anaconda安装包比较大&#xff0c;耗时比较长&#xff0c;如果你是绝对的初学者&#xff0c;选择Anaconda会比较稳妥一些&#xff1b;否则建议你还是选择Miniconda安…

docker 1:介绍

docker 1&#xff1a;介绍 docker解决哪些问题&#xff1a; 传统APP在安装到不同电脑的时候可能会遇到依赖问题&#xff0c;比如缺少VS 20xx&#xff0c;软件无法运行”的情况。docker使用容器技术将软件 依赖​打包为image包发布&#xff0c;解决了依赖问题。docker有一个官…

考研高数(导数的定义)

总结&#xff1a; 导数的本质就是极限。 函数在某点可导就必连续&#xff0c;连续就有极限且等于该点的函数值。 例题1&#xff1a;&#xff08;归结原则的条件是函数可导&#xff09; 例题2&#xff1a; 例题3&#xff1a;

Unity下使用Sqlite

sqlite和access类似是文件形式的数据库&#xff0c;不需要安装任何服务&#xff0c;可以存储数据&#xff0c;使用起来还是挺方便的。 首先需要安装DLL 需要的DLL 我们找到下面两个文件放入Plugins目录 Mono.Data.Sqlite.dll System.Data.dll DLL文件位于Unity的安装目录下的…

controller-manager学习三部曲之三:deployment的controller启动分析

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 《controller-manager学习三部曲》完整链接 通过脚本文件寻找程序入口源码学习deployment的controller启动分析 本篇概览 本文是《controller-manager学习三…

部署JForum2过程。

居然用了两天时间&#xff0c;才把JForum2部署成功。走了一些弯路&#xff0c;主要原因是想当然&#xff0c;以为jdk和tomcat&#xff0c;应该向下兼容&#xff0c;所以就随便选的版本。 一、jdk-17、apache-tomcat-10.1.18-windows-x64&#xff0c;部署完jforum-2.8.2.war,改…

基于STM32与FreeRTOS的四轴机械臂项目

目录 一、项目介绍 二、前期准备 1.硬件准备 2.开发环境 3.CubeMX配置 三、裸机各种模块测试 1.舵机模块 2.蓝牙模块 3.按键摇杆传感器模块和旋钮电位器模块 4.OLED模块 5.W25Q128模块 四、裸机三种控制测试 1.摇杆控制 2.示教器控制 3.蓝牙控制 五、裸机与Free…

linux应用 进程间通信之共享内存(POSIX)

1、前言 1.1 定义 POSIX共享内存是一种在UNIX和类UNIX系统上可用的进程间通信机制。它允许多个进程共享同一块内存区域&#xff0c;从而可以在这块共享内存上进行读写操作。 1.2 应用场景 POSIX共享内存适用于需要高效地进行大量数据交换的场景&#xff0c;比如多个进程需要…

Hive的Join连接

前言 Hive-3.1.2版本支持6种join语法。分别是&#xff1a;inner join&#xff08;内连接&#xff09;、left join&#xff08;左连接&#xff09;、right join&#xff08;右连接&#xff09;、full outer join&#xff08;全外连接&#xff09;、left semi join&#xff08;左…

C++ bfs再探迷宫游戏(五十五)【第二篇】

今天我们用bfs解决迷宫游戏。 1.再探迷宫游戏 前面我们已经接触过了迷宫游戏&#xff0c;并且学会了如何使用 DFS 来解决迷宫最短路问题。用 DFS 求解迷宫最短路有一个很大的缺点&#xff0c;需要枚举所有可能的路径&#xff0c;读入的地图一旦很大&#xff0c;可能的搜索方案…

VM和Linux安装

VM和Linux安装 一、下载VM 1.官网地址&#xff1a;https://www.vmware.com/cn.html 2.其他地址&#xff1a;http://ww7.nocmd.com/windows/740.html 许可证这个&#xff0c;大家可以自己上网搜索&#xff0c;很容易就搜索到就可以使用了 上面内容就是安装VM的步骤 安…

BFS与DFS初级练习(排列数字,n-皇后,走迷宫)

BFS与DFS初步了解 DFS&#xff08;深度优先搜索&#xff09;和BFS&#xff08;广度优先搜索&#xff09;是两种常用的图遍历算法。 DFS是一种递归的搜索算法&#xff0c;它从起始节点开始&#xff0c;沿着路径依次访问与当前节点相邻的未访问节点&#xff0c;直到无法继续访问…

Pytorch的可视化

1 使用 wandb进行可视化训练过程 本文章将从wandb的安装、wandb的使用、demo的演示进行讲解。 1.1 如何安装wandb&#xff1f; wandb的安装比较简单&#xff0c;在终端中执行如下的命令即可&#xff1a; pip install wandb在安装完成之后&#xff0c;我们需要&#xff0c;去…

【力扣】5.最长回文子串

这道题我主要是通过动态规划来进行解题&#xff0c;看了我好久&#xff08;解析&#xff09;&#xff0c;生疏了呀。 首先就是判断一个字符串是不是回文&#xff0c;我们可以设置两个指针&#xff0c;从前往后进行判断即可&#xff0c;运用暴力解题法&#xff0c;这里运用的动…

【C++】内存详解(堆,栈,静态区)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

【FPGA】VHDL:八段码到8421BCD码转换电路

目录 EDA设计基础练习题 &#xff1a; 实验要求如下&#xff1a; 代码 八段码到8421BCD码转换电路 8421BCD码到八段码转换电路 八段码到8421BCD~运行结果展示 8421BCD转八段码~运行结果展示 特别注意 软件&#xff1a;Quartus II 13.0 (64-bit) 语言&#xff1a;VHDL E…

书生谱语-基于 InternLM 和 LangChain 搭建知识库

大语言模型与外挂知识库&#xff08;RAG&#xff09;的优缺点 RAG方案构建与优化 作业 在创建web_demo时&#xff0c;需要根据教程将服务器端口映射到本地端口&#xff0c;另外需要将链接的demo从服务器中复制出来&#xff0c;不要直接从服务器打开demo页面&#xff0c;不然会…

Blazor OIDC 单点登录授权实例5 - 独立SSR App (net8 webapp ) 端授权

目录: OpenID 与 OAuth2 基础知识Blazor wasm Google 登录Blazor wasm Gitee 码云登录Blazor OIDC 单点登录授权实例1-建立和配置IDS身份验证服务Blazor OIDC 单点登录授权实例2-登录信息组件wasmBlazor OIDC 单点登录授权实例3-服务端管理组件Blazor OIDC 单点登录授权实例4 …

低资源学习与知识图谱:构建与应用

目录 前言1 低资源学习方法1.1 数据增强1.2 特征增强1.3 模型增强 2 低资源知识图谱构建与推理2.1 元关系学习2.2 对抗学习2.3 零样本关系抽取2.4 零样本学习与迁移学习2.5 零样本学习与辅助信息 3 基于知识图谱的低资源学习应用3.1 零样本图像分类3.2 知识增强的零样本学习3.3…

鸿蒙小案例-你画我猜

鸿蒙小案例-你画我猜 1.准备组件(组件布局) 2.实现跟随鼠标画笔画出图案功能 3.实现复制上面的画笔的图案功能 4.其他小功能1.组件的准备 画布的组件官方给的API是Canvas&#xff0c;需要传递一个参数CanvasRenderingContext2D 直接搜索API 使用官方案例 private settings: …