2

次の構造の Java Web アプリがあります。

- Project
     - Web Pages
          + WEB-INF
          + resources
          - administration
               systemsettings.xhtml
               userhandling.xhtml
          login.xhtml
          index.xhtml
          menubar.xhtml
          ...
     + Source Packages ...

最近、administrationフォルダーを に追加し、Web Pagesそこに 2 つのページを移動.xhtmlして、管理者承認フィルターのより具体的な URL パターンを記述できるようにしました。

administrationただし、フォルダー内のページのパスがわかりません。<a href='index.xhtml'>動作している間、<a href='administration/systemsettings.xhtml'>動作しませんjava.io.FileNotFoundException

アップデート:

systemsettings.xhtml の内容は次のとおりです。

<h:body>
    <ui:insert name="header" >
        <ui:include src="menubar.xhtml" />
    </ui:insert>
    <div>Administration - System settings</div>
</h:body>

リファクタリング後に、含まれているページへのパスを更新するのを忘れていました。@BalusC が提案したように、これを に変更することで修正でき<ui:include src="menubar.xhtml" />ます<ui:include src="/menubar.xhtml" />

4

1 に答える 1

2

リンクが のようなスキームで始まらない場合、http://ブラウザのアドレス バーに表示される現在のリクエスト URI に相対的な相対リンクです。相対リンクが で始まる場合、/それはリクエスト URI のドメイン ルートに対して相対的です。相対リンクが で始まらない場合は/、リクエスト URI で現在開いているフォルダーに相対します。

現在開いているフォルダについて確実に判断できない場合は、コンテキスト パスを明示的に先頭に追加して、ドメイン相対リンクにする必要があります#{request.contextPath}

<a href="#{request.contextPath}/administration/systemsettings.xhtml">settings</a>

別の方法は、JSF<h:link>コンポーネントを使用することです。コンテキスト パスが自動的に追加されます (また、JSF マッピングも自動的に適用されます!)。次の<h:link>例は、同等の HTML を生成します。

<h:link value="settings" outcome="/administration/systemsettings.xhtml" />
<h:link value="settings" outcome="/administration/systemsettings" />
于 2013-09-18T11:13:55.600 に答える