【发布时间】: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}、<h:outputText value="#{output}"/> 还是<h:outputText value="#{output}" escape="true"/>,输出都不会转义...
【问题讨论】:
-
你是在使用这个具体的例子,还是在使用一个包含
<的属性字符串? -
我正在从数据库中检索一个字符串(到一个支持 bean 字符串字段中),其中包含一个未编码的“
-
我也一直在尝试直接在 XHTML 中使用硬编码字符串,以确保它不是数据库驱动程序问题。
-
无论数据库返回什么,JSF 控件都应该正确地对其进行转义,这样就不应该成为问题。
-
我猜你可能需要在
<h:outputText>中设置escape=true来转义XML 字符
标签: jsf jsf-2 html-escape