thymeleaf自定义标签attribute无法取param值的解决方法。

有时候使用th:xxx="${param.xxx}"这种方式读取param中的值会报下面这种异常

Exception evaluating SpringEL expression: "param.xxxxx" 
Access to variable "param" is forbidden in this context. Note some restrictions apply to variable access. For example, direct access to request parameters is forbidden in preprocessing and unescaped expressions

解决方法:
先在上层标签使用th:with="code=${param.code}"将param中的值读取为局部变量。
然后再将使用局部变量给自定义attribute赋值th:code="${code}"
结构类似

<div th:with="code=${param.code}">
	<p th:code="code">
	</p>
</div>
### 关于 JSP 文件中的属性名前需有空白字符的错误 在开发过程中遇到 `JSP specification error: attribute name must be preceded by whitespace` 的提示时,通常是因为 JSP 文件中某个标签的属性定义存在问题。具体来说,在 HTML 或 XML 中,属性之间以及属性与标签名称之间需要通过空格分隔。如果没有正确添加这些空格,则会触发此错误。 以下是可能的原因及其解决方案: #### 可能原因分析 1. **缺少必要的空格** 如果两个属性之间或属性与标签名称之间没有足够的空格,就会引发该错误。例如: ```jsp <c:set var="name"value="John Doe"/> ``` 上述代码中,`var="name"` 和 `value="John Doe"` 之间的空格缺失,因此会导致解析失败[^3]。 2. **动态生成的内容问题** 当 JSP 页面的部分内容由脚本或其他逻辑动态生成时,可能会遗漏空格。例如: ```jsp <% String attrName = "class"; %> <div<%=attrName%>=myClass>Content</div> ``` 这里的 `<div<%=attrName%>` 缺少一个空格,最终渲染成 `<divclass=myClass>`,从而导致语法错误。 3. **模板引擎冲突** 若项目中使用了其他模板引擎(如 Thymeleaf),某些特殊标记可能导致混淆并影响正常的 JSP 解析行为。 --- #### 解决方案 针对上述情况,可以采以下措施修复问题: ##### 方法一:手动检查并修正空格 仔细审查第 17 行附近的代码片段,确认是否存在未加空格的情况。例如,将以下有问题的代码: ```jsp <input type=text value=${param.value}> ``` 修改为: ```jsp <input type="text" value="${param.value}"> ``` 注意这里不仅补充了必需的空格,还按照最佳实践给所有属性加上双引号。 ##### 方法二:启用格式化工具 利用 IDE 提供的代码格式化功能可以帮助快速定位潜在问题区域。大多数现代编辑器支持自动调整缩进和间距设置,减少人为疏忽带来的风险。 ##### 方法三:验证动态拼接字符串 对于涉及服务器端变量嵌套的情形,请确保输出结果符合标准语法规则。比如改写之前提到的例子为: ```jsp <div <%= " " + attrName %>="myClass">Content</div> ``` 这样能够有效防止因漏掉间隔符而产生的异常状况。 --- ### 示例代码展示 下面提供一段经过优化后的 JSP 片段作为参考: ```jsp <c:set var="username" value="Alice Smith" /> <form method="post"> <!-- 正确处理属性间的空格 --> <label for="user-name">Username:</label> <input id="user-name" name="username" value="${username}" required/> </form> ``` 以上例子展示了如何合理运用空格来避免类似的规格违例现象发生。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值