我正在从数据库中读取一些消息并将其扔到jsp页面。当使用struts逻辑标记从数据库呈现消息时,数据库中的消息允许HTML格式化,这意味着如果在数据库消息中使用了诸如<table width="99%">
之类的html标记,则在使用struts逻辑时它将正确呈现此html标签...但是如果使用JSTL来渲染对象(数据库消息),那么html格式化将无法正确呈现。
struts逻辑标签的一个例子是:
<div class="textTitle"><bean:write name="blahBlah" filter="false" property="displayObjects[1].fieldName"/></div>
JSTL标记的一个示例是:
<td width="30%" class="formOpt"><c:out value="${pubParam.fieldName}"/>:</td>
注意我使用c:out
表示JSTL,bean:write
表示struts标记..
有没有人知道为什么在JSTL中html格式化还没有被渲染到页面上(意味着包括数据库消息中的<table width="99%">
)?
答案 0 :(得分:1)
默认情况下,JSTL c:out
标记在value属性中转义XML。因此它可以防止从表达式变量中呈现一些不需要的代码XSS。在大多数情况下,您不应该c:out
要呈现的html内容。但是有一个开关你可以自己承担风险。
<c:out value="${pubParam.fieldName}" escapeXml="false"/>