[c.y.j]js freemarker 去除空格

本文介绍了一种使用JavaScript去除字符串两端空白的方法。通过document.getElementById('id').value.replace(/(^s*)|(s*$)/g,'')实现字符串的前后空白字符移除。

document.getElementById("id").value.replace(/(^\s*)|(\s*$)/g,"");    去除左右空白

${test?trim}   


Source Design Preview Problems M Tasks F Console 83 Terminal 里 Servers Q Search G Workspace Migration Apache Tomcat v8.0 at localhost at localhost [MyEclipse Server] C:\Program Files\Java\jdk1.8.0_181\bin\javaw.exe (2025年11月14日上午9:53:06) at com.jfinal.render.FreeMarkerRender.render(FreeMarkerRender.java:128) .. 20 more Caused by: freemarker.core.ParseException: Parsing error in template "pages/ink/_layout.html" in line 1, column 21: Encountered "_", but was expecting one of: at freemarker.core.FMParser.generateParseException(FMParser.java:4672) at freemarker.core.FMParser.jj_consume_token(FMParser.java:4543) at freemarker.core.FMParser.Macro(FMParser.java:1826) at freemarker.core.FMParser.FreemarkerDirective(FMParser.java:2368) at freemarker.core.FMParser.Content(FMParser.java:2593) at freemarker.core.FMParser.OptionalBlock(FMParser.java:2761) at freemarker.core.FMParser.Root(FMParser.java:2933) at freemarker.template.Template.<init>(Template.java:193) at freemarker.cache.TemplateCache.loadTemplate(TemplateCache.java:419) at freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:330) at freemarker.cache.TemplateCache.getTemplate(TemplateCache. java:205) at freemarker.template.Configuration.getTemplate(Configuration.java:740) at freemarker.core.Environment.getTemplateForInclusion(Environment.java:1694) at freemarker.core.Include.accept(Include.java:159) .. 26 more 2025-11-14 10:03:15[DEBUG]-[org.quartz.core.QuartzSchedulerThread.run()]: batch acquisition of o triggers 2025-11-14 10:03:40[DEBUG]-[org-quartz.core.QuartzSchedulerThread.run()]: batch acquisition of 0 triggers
最新发布
11-15
<think> 我们正在处理一个FreeMarker模板解析错误。错误信息指出在解析模板 'pages/ink/_layout.html' 时,在第1行第21列遇到了一个下划线字符 '_',但FreeMarker期望的是其他内容。 首先,我们需要理解FreeMarker模板的基本语法。FreeMarker使用特定的标签(如<#...>)作为指令,而其他内容则被视为静态文本。当FreeMarker解析模板时,它会寻找这些指令标签。如果模板中包含不符合预期的字符,特别是在指令标签内部或指令标签开始的地方,就可能导致解析错误。 根据错误信息,问题出现在第1行第21列。这意味着我们需要检查模板的第一行,特别是第21个字符附近的内容。 常见的可能导致这种错误的情况包括: 1. 在指令标签内使用了不正确的字符。例如,在<#指令>中,指令名称必须是合法的(通常只允许字母、数字和下划线,但不能以数字开头,并且不能包含除下划线以外的特殊字符)。 2. 指令标签没有正确关闭,或者标签的尖括号不匹配。 3. 在指令标签开始后,但指令名称之前出现了非法字符。例如,<# 后面必须跟指令名称(如assign, if, list等),如果后面跟着一个数字或其他不允许的字符,则会出错。 4. 指令标签中使用了未转义的特殊字符。 由于错误信息中特别提到了下划线 '_',我们需要考虑下划线在FreeMarker中的使用规则。在FreeMarker中,下划线通常可以用在标识符中(如变量名、指令名等),但有一些限制: - 指令名不能以下划线开头(除非是内置指令,但内置指令通常不以这种方式出现)。 - 在指令标签内,如果指令名之前有空格,然后出现下划线,这可能是非法的。因为指令名应该紧跟在<#后面(可以有空格,但空格之后必须是合法的指令名或内建指令)。 因此,我们需要检查模板的第一行,特别是第21列附近的内容。 假设模板的第一行内容如下(由于我们没有实际内容,只能推测): 错误位置在第1行第21列,那么我们可以假设该行至少21个字符。 例如,假设第一行是: ``` <#some_directive param=value_here> ``` 或者 ``` <#assign some_variable = "value_with_underscore"> ``` 在这些例子中,下划线是变量名或指令名的一部分,通常是允许的。所以问题可能出现在其他地方。 但是,错误信息说“遇到 '_' 但期望其他内容”,这意味着解析器在某个上下文中遇到了下划线,但此时它期望的是另一种字符。例如,在指令名称中,第一个字符必须是字母(不能是下划线),除非是内建指令(如<#if>,但指令名是“if”,不是以_开头)。因此,如果指令名以下划线开头,例如<#_myDirective>,那么就会出错,因为指令名不能以下划线开头。 另一种可能性:在<#之后,如果紧接着一个下划线,如<#_,那么FreeMarker会认为这是一个指令的开始,但是指令名不能以下划线开头,所以会报错。 因此,我们应检查第一行第21列附近是否有类似<#_的结构。 由于我们无法直接查看模板内容,我们只能建议用户检查模板的第一行,特别是第21列(注意:列数通常包括前面的空格和制表符)的字符。 可能的解决方案: 1. 检查第一行第21列附近的字符,看是否有<#_这样的结构。如果有,考虑这个下划线是否是误输入,或者是否应该去掉这个下划线,或者将指令名改为不以_开头。 2. 检查指令的拼写,确保指令名正确。 3. 检查是否在指令标签内使用了未转义的特殊字符。 4. 如果下划线是作为变量名的一部分,那么检查它是否出现在正确的位置。例如,在<#assign ...>中,变量名可以包含下划线,但变量名不能以下划线开头(除非是作为内建变量的一部分,但通常用户自定义变量以下划线开头并不被推荐,不过FreeMarker并不禁止变量以下划线开头,所以这一点可能不是问题)。 另外,注意错误信息中的行号和列号是准确的,因此请用户精确检查该位置。 如果用户无法直接确定,可以尝试提供第一行的内容,以便进一步分析。 根据引用[2]中提到的FreeMarker配置,我们设置了字符集为UTF-8,这应该可以避免编码问题导致的特殊字符错误。 因此,我们建议用户: 1. 打开模板文件 'pages/ink/_layout.html'。 2. 找到第1行,并定位到第21列(注意:编辑器通常可以显示列号)。 3. 检查该位置的字符以及周围的上下文(比如前后几个字符)。 4. 特别检查是否有<#后面紧跟着下划线的情况,或者指令名以下划线开头的情况。 如果用户发现确实有<#_这样的结构,那么需要修改指令名,去掉下划线或者使用合法的指令名。如果这个下划线是用于其他目的(比如在字符串中),那么可能需要检查是否在指令标签内正确使用了引号(例如,字符串应该用引号括起来)。 如果用户无法找到明显的问题,也可以尝试将第一行内容分成多行,以便更准确地定位错误位置。 此外,如果该模板是从其他模板继承或包含的,也要确保父模板或包含的模板没有语法错误。 由于错误发生在第一行,所以问题很可能就在第一行的某个指令上。 最后,如果用户仍然无法解决,可以考虑将第一行的内容提供出来,以便进一步诊断。 综上所述,解决方法主要是检查并修正第一行第21列附近的语法错误,特别是确保指令名称符合FreeMarker的命名规则(不以数字或下划线开头,只包含字母、数字和下划线,且不能包含其他特殊字符)。 注意:FreeMarker的指令标签有几种形式: - <#directivename ...> - <@directivename ...> (用于自定义指令) - </#directivename> (结束标签) - <#-- ... --> (注释) 在<#之后,必须是一个合法的指令名(或者预定义指令,或者用户自定义指令,但都必须符合命名规则)。 因此,如果<#后面紧跟的是下划线,那么解析器会认为下划线是指令名的开始,但下划线不能作为指令名的第一个字符,所以报错。 所以,请用户检查第一行第21列附近是否有<#_这样的序列,如果有,则删除下划线或将指令名改为合法的名称。 如果用户没有提供具体的模板内容,我们只能给出这样的建议。 希望这些建议能帮助用户解决问题。 </think>根据错误信息分析,FreeMarker在解析模板时遇到下划线`_`导致语法错误,这通常是由以下原因及解决方案: ### 错误原因分析 1. **非法标识符命名** FreeMarker要求变量/指令名**不能以下划线开头**(如`_layout`)。根据FreeMarker官方语法规范,标识符命名规则为: - 首字符必须是字母或`@`、`#`(仅限指令) - 后续字符可以是字母、数字、`@`、`_`、`$` - 禁止使用保留字(如`include`, `list`等) 2. **特殊字符未转义** 模板中出现的`_`可能被解析器误认为指令的一部分,而非普通文本。 ### 解决方案 #### 方法1:修改标识符命名(推荐) 将`_layout.html`中的下划线前缀移除或替换为合法字符: ```ftl <#-- 错误示例 --> <#assign _layout = "value"> <#-- 正确示例 --> <#assign layout = "value"> <#-- 移除下划线 --> <#assign my_layout = "value"> <#-- 下划线不在开头 --> ``` #### 方法2:使用转义语法 若必须保留`_`,需用[= ...]语法显式声明为文本: ```ftl <#-- 原错误内容 --> ${_variable} <#-- 修正方案 --> ${.vars['_variable']} <#-- 访问以下划线开头的变量 --> [#assign _temp = "value"] <#-- 方括号语法避免解析冲突 --> ``` #### 方法3:检查隐藏字符 1. 用十六进制编辑器检查第1行第21列位置是否存在不可见字符(如BOM头) 2. 确保文件编码与配置一致(引用[2]中`spring.freemarker.charset=UTF-8`) 3. 删除行首空格/TAB,验证是否因缩进导致列号计算偏移 ### 预防措施 ```properties # 增加严格语法检查(application.properties) spring.freemarker.settings.recognize_standard_file_extensions=true spring.freemarker.settings.tag_syntax=auto_detect ``` > **关键提示**:FreeMarker 2.3.32+ 已优化对特殊字符的处理,建议升级版本[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值