struts 升级 6.3.0.2 后,innerHtml 属性不起作用

问题描述 投票:0回答:1
apache jsp struts2 freemarker struts-tags
1个回答
0
投票

struts.ui.escapeHtmlBody
设置仅允许在标签正文中切换转义选项。例如,如果您使用嵌套标签并允许转义标签正文中使用的所有标签。它不允许关闭 Struts 标签属性的转义值。

Struts 标签的内容是使用 Freemarker 生成的。最新版本的 Struts 使用其自动转义 html 输出功能,该功能在 Freemarker 中默认启用。

禁用自动转义

对于单个插值,您可以使用

?no_esc
禁用自动转义:

TEMPLATE
<#-- Let's assume we have "HTML" output format by default. -->
${'<b>test</b>'}  <#-- prints: &lt;b&gt;test&lt;/b&gt; -->
${'<b>test</b>'?no_esc}  <#-- prints: <b>test</b> -->

您还可以使用 noautoesc 指令禁用整个部分的自动转义:

TEMPLATE
${'&'}  <#-- prints: &amp; -->
<#noautoesc>
  ${'&'}  <#-- prints: & -->
  ...
  ${'&'}  <#-- prints: & -->
</#noautoesc>
${'&'}  <#-- prints: &amp; -->

就像输出格式一样,这只适用于块内的部分(“着色”逻辑)。

也可以在 ftl 标头中禁用整个模板的自动转义。然后可以使用 autoesc 指令重新启用某个部分:

TEMPLATE
<#ftl autoesc=false>
${'&'}  <#-- prints: & -->
<#autoesc>
  ${'&'}  <#-- prints: &amp; -->
  ...
  ${'&'}  <#-- prints: &amp; -->
</#autoesc>
${'&'}  <#-- prints: & -->

当转义被禁用时,您还可以强制转义单个插值,使用

?esc
:

TEMPLATE
<#ftl autoesc=false>
${'&'}  <#-- prints: & -->
${'&'?esc}  <#-- prints: &amp; -->

当然,autoesc 和

?esc
也可以在
noautoesc
块内工作。


现在您可以欺骗 Freemarker 禁用单个值的自动转义

<s:optiontransferselect
  leftTitle="'<strong>All system groups</strong>'?no_esc"</s> 
 

另一种选择是使用自定义模板来自定义 html 输出,使用自定义 Freemarker 模板,您可以在其中关闭自动转义。

© www.soinside.com 2019 - 2024. All rights reserved.