Struts7中<s:radio>的<br/>标签未换行反而被原样渲染问题
Struts 2.5.33 迁移至 Struts 7.0.0 后 Radio 标签换行失效问题
问题描述
将 Struts 应用从 2.5.33 迁移到 7.0.0 后,原 Radio 标签代码中 list 项里的 <br/> 标签不再被解析为换行,而是直接以文本形式显示在页面上。
原 Struts 2.5.33 代码:
<s:radio theme="simple" name="dtype" list="#{'key1':'value1<br/>','key2':'value2'}" onclick="customJSfunction()" />
在 2.5.33 中可正常渲染为换行效果:
value1
value2
但迁移至 7.0.0 后,渲染效果变为:
value1<br/> value2
已尝试在 struts.xml 中添加 <constant name="struts.ui.escapeHtmlBody" value="false" />,但无效果,且未找到类似旧版本的 escapeHTML=false 属性。
解决方案
方案1:为 Radio 标签添加 escape="false" 属性
Struts 7.0.0 的 UI 标签支持通过 escape 属性控制是否转义 HTML,直接在标签上添加该属性即可:
<s:radio theme="simple" name="dtype" list="#{'key1':'value1<br/>','key2':'value2'}" onclick="customJSfunction()" escape="false" />
方案2:使用 OGNL 的 raw() 函数包裹需解析的 HTML 内容
通过 OGNL 的 raw() 函数标记无需转义的字符串,确保 <br/> 被浏览器解析为换行:
<s:radio theme="simple" name="dtype" list="#{'key1':raw('value1<br/>'),'key2':'value2'}" onclick="customJSfunction()" />
方案3:调整全局转义配置常量
尝试替换原配置的常量,使用 struts.ui.escapeHtml 全局控制 HTML 转义:
<constant name="struts.ui.escapeHtml" value="false" />
内容的提问来源于stack exchange,提问作者bikramjit naha
相关产品推荐
相关产品推荐

