【问题标题】:h:outputText is not escaping HTML entitiesh:outputText 没有转义 HTML 实体
【发布时间】:2013-11-20 03:10:41
【问题描述】:

我遇到了一个问题,即 JSF 中的 outputText 没有对“

我正在运行带有 JSF 2.0 的 Tomcat 7.0.40,并且有以下声明:

<?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>

当然,其他 HTML 实体也不会被转义:&、> 等

无论我使用#{output}&lt;h:outputText value="#{output}"/&gt; 还是&lt;h:outputText value="#{output}" escape="true"/&gt;,输出都不会转义...

【问题讨论】:

  • 你是在使用这个具体的例子,还是在使用一个包含&lt;的属性字符串?
  • 我正在从数据库中检索一个字符串(到一个支持 bean 字符串字段中),其中包含一个未编码的“
  • 我也一直在尝试直接在 XHTML 中使用硬编码字符串,以确保它不是数据库驱动程序问题。
  • 无论数据库返回什么,JSF 控件都应该正确地对其进行转义,这样就不应该成为问题。
  • 我猜你可能需要在&lt;h:outputText&gt; 中设置escape=true 来转义XML 字符

标签: jsf jsf-2 html-escape


【解决方案1】:

升级到 jsf-impl 2.1.26 解决了这个问题。

【讨论】:

    【解决方案2】:

    这是由 Mojarra 2.1.12 中的错误引起的,报告为 issue 2503 并在 2.1.13 中修复。

    因此,如果您至少升级到 Mojarra 2.1.13,那么这个特殊问题应该会消失。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 2011-12-08
      相关资源
      最近更新 更多