У меня проблема, когда '<' не экранируется outputText в JSF.h: outputText не ускользает от HTML-объектов
Я бегу Tomcat 7.0.40 с JSF 2.0, и имеют следующие объявления:
<?xml version="1.0" encoding="UTF-8"?>
<f:view contentType="text/html" encoding="UTF-8">
Эта линия ломает HTML, потому что '<' НЕ сбежавшего:
<h:outputText value="Some < text from the database"/>
на выходе отображается «Some», а затем HTML-код сломан из-за неэкранированного «<»
«<» указан в таблицах данных е, а также правильно делает в форме текстовое поле:
<p:inputText value="#{db_data}" ... />
Мой файл web.xml содержит:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Немного моей POM ...
<!-- JSF -->
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.12</version>
<exclusions>
<exclusion>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.12</version>
</dependency>
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.omnifaces</groupId>
<artifactId>omnifaces</artifactId>
<version>1.4.1</version>
<!-- Or 1.5-SNAPSHOT -->
</dependency>
Of Конечно, другие HTML-объекты также НЕ скрываются: &,> и т. д.
Независимо от того, использую ли я #{output}
, <h:outputText value="#{output}"/>
или <h:outputText value="#{output}" escape="true"/>
, выход НЕ экранирован ...
Вы используете этот конкретный пример или используете свойство String, которое содержит '<'? – SJuan76
Я извлекаю строку из базы данных (в поле String для бэкэнда), которая содержит в ней незашифрованное «<» ... – urbanmarsupial
Я также пытался с жестко закодированной строкой непосредственно в XHTML, чтобы убедиться, что это не проблема с драйвером DB. – urbanmarsupial