2013-11-19 2 views
1

У меня проблема, когда '<' не экранируется 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"/>, выход НЕ экранирован ...

+0

Вы используете этот конкретный пример или используете свойство String, которое содержит '<'? – SJuan76

+0

Я извлекаю строку из базы данных (в поле String для бэкэнда), которая содержит в ней незашифрованное «<» ... – urbanmarsupial

+0

Я также пытался с жестко закодированной строкой непосредственно в XHTML, чтобы убедиться, что это не проблема с драйвером DB. – urbanmarsupial

ответ

1

Эта проблема была решена путем перехода на jsf-impl 2.1.26.

1

Это связано с ошибкой в ​​Mojarra 2.1.12, которая сообщается как issue 2503 и зафиксирована в 2.1.13.

Итак, если вы обновите, по крайней мере, до Mojarra 2.1.13, то эта специфическая проблема должна исчезнуть.

Смежные вопросы