5

私のMavenプロジェクトでは、「index.xhtml」ファイルを作成しました。プロジェクトをビルドして実行すると、Web ブラウザーに何も表示されませんでした。ソースを表示すると、通常の html タグではなく、ソース コードが表示されます。

次の方法で XHTML ファイルを作成しようとしました。

  1. プロジェクトを選択し、[New] を右クリックして [Other] を選択し、[Web] カテゴリを選択してから [JSF ページ] を選択します。
  2. プロジェクトを選択し、[新規] を右クリックして [その他] を選択し、[JavaServer Faces] カテゴリを選択してから [JSF ページ] を選択します。
  3. プロジェクトを選択し、New.. を右クリックして Other.. を選択し、"Other" カテゴリを選択してから XHTML Page を選択します。

上記の方法はどれも機能しませんでした。

Maven POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>ProfitV10</groupId>
<artifactId>ProfitV10</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

<name>ProfitV10</name>

<properties>
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>3.3.1</version>
    </dependency>
</dependencies>

<repositories>
    <repository>
        <id>prime-repo</id>
        <name>PrimeFaces Maven Repository</name>
        <url>http://repository.primefaces.org</url>
        <layout>default</layout>
    </repository>
</repositories>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <compilerArguments>
                    <endorseddirs>${endorsed.dir}</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.1</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${endorsed.dir}</outputDirectory>
                        <silent>true</silent>
                        <artifactItems>
                            <artifactItem>
                                <groupId>javax</groupId>
                                <artifactId>javaee-endorsed-api</artifactId>
                                <version>6.0</version>
                                <type>jar</type>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

index.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <p:spinner />
    </h:body>
</html>

それが最初のシナリオです。2 番目のシナリオでは、PrimeFaces で問題なく動作する NetBeans Web アプリケーション プロジェクトが既にあります。「index.html」はレンダリングされました。しかし、新しい JSF ページを作成して PrimeFaces 名前空間を含めたときxmlns:p="http://primefaces.org/ui"、しかし、この特定の JSF と他の新しく作成された JSF ページはレンダリングされません。

私が見逃しているものに違いありませんが、何がわかりません。

私の環境は以下の通りです。

  • JDK6
  • ネットビーンズ 7.1.2
  • プライムフェイス 3.3
  • アパッチ 7.0.2
  • Windows 7 (32 ビット)

ありがとう。

4

3 に答える 3

6

ウェルカム ファイルとして使用/index.xhtmlしているため、FacesServlet もその拡張子にマップしておく必要があります。

既存のプレフィックス マッピングが必要ない場合は、次のように置き換えます。

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

それ以外の場合は、パターンの意味を追加するだけで、次のようになり*.xhtmlます。

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

*.xhtmlFacelets のソース コードが一般に公開されるのを防ぐために、ほぼ常にそこにマッピングが必要であることに注意してください。

アップデート:

.jsf と .xhtml の違いについて:

.jsfは、デフォルトのマッピングの 1 つです (JSF 2.1 で FacesServlet をまったく宣言しない場合は、とりわけこれが得られます)。これは、ディスク上の物理ファイルの拡張子 (.jsp または .xhtml) と URL で使用される拡張子の違いに起因します。

残念ながら、JSF は別の明示的なサーブレット (Faces サーブレット) を介して行わなければならない一種のアドオン手法であったため、これらは歴史的に異なっていました。純粋な JSP はより組み込みであるため、この制限はありませんでした。JSF ページは最初は JSP でしか作成されなかったため、URL 要求で .jsp を使用しただけでは、コンテナーは直接 JSP に移動し、Faces サーブレットをスキップします。

そのため、これに対する回避策を考案する必要がありました。それは、Faces サーブレットを にマップすることでした。その後、Faces サーブレットは、ディスク上に*.jsfまだ拡張子が残っている JSP ファイルに転送します。.jsp

*.xhtml個人的には、単純なマッピングがすぐに使用できる唯一の適切なオプションだと思います*.xhtmlが、下位互換性のために、JSF はこれをデフォルトとして設定できなくなっているようです。

于 2012-07-04T09:18:16.747 に答える
2

primefaces.jar ファイルを WebContent/WEB-INF/lib の下に置き、この jar ファイルをビルド パスに追加してみてください。

于 2014-07-25T13:14:20.150 に答える
1

別のサーブレット マッピングを追加します。

<servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

その後、次の URL を使用します: http://[HOST]:[PORT]/[WEBAPP]/faces/index。jsf ( .jsfであり、.xhtml ではありません)。

于 2012-07-04T08:31:28.847 に答える