1

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"/>ても、出力はエスケープされません...

4

2 に答える 2

1

この問題は、jsf-impl 2.1.26 にアップグレードすることで解決されました。

于 2013-11-19T19:06:57.607 に答える