Struts2标记中的HTML标记

时间:2017-06-23 12:35:06

标签: jsp struts2

我在Struts2标记中从文本到UTF-8的自动编码有一些问题。

我想将包含从操作类中的HTML标记的值传递给JSP页面,但在struts标记中,此值自动编码为UTF-8并且HTML标记显示不正确。

例如: 我在action class

中有一个名为param的String变量
String param=param[0] + "& <br>" + param[1];

这个参数在JSP页面中传递,并使用Struts标记显示在页面中:

<s:property value="%{param}">

我的问题是,在jsp页面中,<br>标记会自动编码,并像测试"& <br>"一样使用它,而不是像HTML标记一样使用它并显示"&"后跟 输入换行符。

有没有人知道如何跳过这种自动编码过程?

2 个答案:

答案 0 :(得分:1)

您是否尝试过{documented)属性escapeHtml

<s:property value="%{param}" escapeHtml="false" />

PS:另外两个注意事项:

  1. 您正在使用HTML中特有的字符&。如果您不想逃避字符串,则should write it as &amp;

  2. 正如Rowan C在他的回答中恰当地指出的那样,在网页中使用未转义的html可能很危险,尤其是如果字符串(在您的情况下是param数组)是动态的并且可以通过客户端。如果你不能信任或正确消毒它,那么就不要这样做。严重。

答案 1 :(得分:1)

默认情况下,s:property tag会转义html代码以防止XSS安全违规。如果您信任使用此标记显示的内容,则可以使用其中一个escape属性来禁用此过程:

Name                Required    Default Evaluated   Type    Description
escapeCsv           false       false   false       Boolean Whether to escape CSV (useful to escape a value for a column)
escapeHtml          false       true    false       Boolean Whether to escape HTML
escapeJavaScript    false       false   false       Boolean Whether to escape Javascript
escapeXml           false       false   false       Boolean Whether to escape XML   

在您的代码中,您可以使用

<s:property value="%{param}" escapeHtml="false"/>