0

Maven、jsf、および richfaces を使用して動的 Web プロジェクトを開発しました。私の問題にまっすぐに、私は歴史を省略します。開発をしばらく中断した後、Eclipse->Tomcat で自分のプロジェクトを宣言しました。私の開始ページには、画像と簡単なログインフォームがあります。画像やデザインはOK、アドレスhttp://localhost:8080/myapp/は未定(画像やCSSへのリンクは - のようにmyapp/img/header.png

ログを記録した後、ランディング ページ (richfaces 動的ページ) にリダイレクトされhttp://localhost:8080/myapp/faces/statistics.xhtml、画像と css へのすべてのリンクがmyapp/faces/img/header.pngに変換され、その後、画像と css はありません。

私は混乱しました、何が起こっているのですか?数日前、それは完璧に機能しました。

web.xmlにはこれがあります

<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>
    <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
  </servlet-mapping>

問題を解決するためにどこから始めればよいかさえわかりません。画像をデザインに戻す方法


アップデート

この不快な動作は、layout.xhtml のみに存在することがわかりました。私が作成したのはこのファイルだけだからです。これは、すべてのプロジェクトの設計です。簡単に言うと、次のようになります。

…
<h:head>
<link href="css/main.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
<img src="img/header.png">
… design …
<div class="menuAndContent">
    <div class="menuLeft">
        <ui:insert name="menuLeft" />
    </div>
    <div class="content">
        <ui:insert name="content" />
    </div>
</div>
… design …
<img src="img/selector2.gif">
…

そのため、div=content と div=menu のファイルのみを作成します。このファイルは正常に機能し、それらのすべての画像が存在します。

このレイアウト ファイルだけが「冗談」です。すべてのリンク:css/main.css img/header.png img/selector2.gif最初のステップで機能します! アドレスhttp://localhost:8080/myapp/と browser.dev.tool で、彼がパスからこのリソースを取得していることを示しており、ログイン後myapp/css/main.css myapp/img/header.png にさらに深くなるhttp://localhost:8080/myapp/faces/statistics.xhtmlと、異なるコンテンツの同じページにリダイレクトされます。そして、 browser.dev.tool で、このリンクを含むページが表示されますcss/main.css img/header.png img/selector2.gif-それはすべて正しく、それは良いですが、このリソースからこのリソースをこのリソースにmyapp/css/main.css myapp/img/header.png変換するためのパスですmyapp/faces/css/main.css myapp/faces/img/header.png。それが問題です。

4

2 に答える 2

1

Web アプリケーションで URI 相対 URL を使用しないでください。

<link href="css/main.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
<img src="img/header.png">

ブラウザーのアドレス バーに表示されるように、要求 URI に対して相対的になります。ページが/facesフォルダ内にある場合、ブラウザはそのフォルダの下からすべての URI 相対リソースもダウンロードします。

Web アプリケーションでコンテキスト相対 URL を使用する必要があります。

<link href="#{request.contextPath}/css/main.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" href="#{request.contextPath}/favicon.ico" type="image/x-icon" />
<img src="#{request.contextPath}/img/header.png">

ただし、JSF リソース管理を利用することをお勧めします。

<h:outputStylesheet name="css/main.css" />
<link rel="shortcut icon" href="#{resource['favicon.ico']}" type="image/x-icon" />
<h:graphicImage name="img/header.png" />

フォルダー内のそれらのリソースを使用し/resourcesます。

WebContent
 |-- WEB-INF
 |-- META-INF
 |-- resources
 |    |-- css 
 |    |    `-- main.css
 |    |-- img
 |    |    `-- header.png
 |    `-- favicon.ico 
 :

以下も参照してください。

于 2013-06-12T13:30:46.337 に答える
0

Alexandre Lavoieに感謝します(コメントの意味が一目でわかりませんでした)私の問題は実際にweb.xmlファイルにあります

答えは質問にあります!

<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>
    <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
</servlet-mapping>

ダブルマッピングです!マッピングは 1 つだけにする必要があります。だからこれだけ残す

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

そして私の問題はなくなりました!

于 2013-06-12T09:20:43.333 に答える