【问题标题】:Create a link to a JSF page in a subfolder在子文件夹中创建指向 JSF 页面的链接
【发布时间】:2013-09-18 09:46:23
【问题描述】:

我有一个具有以下结构的 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 建议的那样,这可以通过将&lt;ui:include src="menubar.xhtml" /&gt; 更改为&lt;ui:include src="/menubar.xhtml" /&gt; 来解决。

【问题讨论】:

  • 没有是什么意思?显示哪个错误?
  • 你能发布整个堆栈跟踪吗?

标签: jsf url path


【解决方案1】:

如果链接不是以http:// 之类的方案开头,那么它是一个相对链接,它与您在浏览器地址栏中看到的当前请求 URI 相关。如果相对链接以/ 开头,那么它是相对于请求 URI 中的域根的。如果相对链接不以/ 开头,则它是相对于请求 URI 中当前打开的文件夹的。

如果您无法确定当前打开的文件夹,那么您需要通过显式添加 #{request.contextPath} 可用的上下文路径,使其成为域相关链接。

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

另一种方法是只使用 JSF &lt;h:link&gt; 组件。它会自动添加上下文路径(并且还会自动应用 JSF 映射!)。以下&lt;h:link&gt; 示例生成等效的 HTML。

<h:link value="settings" outcome="/administration/systemsettings.xhtml" />
<h:link value="settings" outcome="/administration/systemsettings" />

【讨论】:

    猜你喜欢
    • 2013-06-10
    • 2016-10-09
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2023-03-12
    • 2013-05-06
    • 2022-01-27
    相关资源
    最近更新 更多