Tomcat (6) экранирует текст из bean-компонентов перед тем, как включить его для пересчета HTML - PullRequest
1 голос
/ 21 июля 2010

Когда я получу от MyBean какой-нибудь текст, например, <p>Hello world</p> и включу его в jsp через jsp:getProperty в получившейся html-странице, это будет &lt;p&gt;Hello world&lt;/p&gt; Я могу предположить, что команда Tomcat сделала это из соображений безопасности, ноне поведение, которое я хочу получить.

В: как получить необходимое поведение?

UPD:

@ Jörn Horstmann

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<jsp:useBean id="xs" class="bean.XS" scope="application"></jsp:useBean>
<html>
  <head><title>Test</title></head>
  <body>
  <c:out value="${xs.yoba}" escapeXml="true"/> <br>
  <c:out value="${xs.yoba}" escapeXml="false"/> <br>
  <c:out value="&lt;p&gt;HELLO WORLD&lt;/p&gt;" escapeXml="true"/> <br>
  <c:out value="&lt;p&gt;HELLO WORLD&lt;/p&gt;" escapeXml="false"/>
  </body>
</html>

Забава Геттера:

public String getYoba(){
    return "&lt;p&gt;HELLO WORLD&lt;/p&gt;"  ;
}

Результирующий html:

<html> 
  <head><title>Test</title></head> 
  <body> 
  &amp;lt;p&amp;gt;Год выпуска: 20 июля 2010&amp;lt;/p&amp;gt; <br> 
  &lt;p&gt;Год выпуска: 20 июля 2010&lt;/p&gt; <br> 
  &amp;lt;p&amp;gt;HELLO WORLD&amp;lt;/p&amp;gt; <br> 
  &lt;p&gt;HELLO WORLD&lt;/p&gt;
  </body> 
</html>

Я хочу:

<html> 
  <head><title>Test</title></head> 
  <body> 
  <P>HELLO WORLD</P>
  </body> 
</html>

1 Ответ

1 голос
/ 21 июля 2010

Вы можете использовать тег jstl c: out, для которого escapeXml установлено значение false, чтобы решить эту проблему:

<c:out value="${myBean.property}" escapeXml="false"/>

Edit:

Когда ваш геттер уже возвращает экранированный HTML, вам нужно сначала удалить его, например, используя Apache Commons Lang StringEscapeUtils:

public String getYoba(){
    return StringEscapeUtils.unescapeHtml("&lt;p&gt;HELLO WORLD&lt;/p&gt;");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...