我有一个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
页面,以便为管理员授权过滤器编写更具体的网址格式。
但是,我不知道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" />
来修复。
答案 0 :(得分: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" />