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,并将两个页面移到那里,.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 回答