我有一个小型的IceFaces项目。打开基本URL localhost:8080 / myContextPath 会打开一个名为index.jsp的文件,其中包含以下内容:
<html>
<head> </head>
<body>
<jsp:forward page="faces/search.xhtml" />
</body>
</html>
首先重定向到faces / search.xhtml。页面显示没有任何问题。浏览器地址栏按预期显示 localhost:8080 / myContextPath 。
位于search.xhtml页面上,有一个提交按钮,如下所示:
<h:commandButton type="submit" value="Search" id="submit" actionListener="#{searchBean.submitButton}" action="#{searchBean.navigate}" />
点击该按钮会触发actionListener,然后触发导航 -action,这会返回一个简单的成功。
导航规则本身如下所示:
<navigation-rule>
<from-view-id>/search.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/search.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
据我所知,在任何情况下,导航规则都应适用。
可悲的是,有时这不起作用。确切地说,每隔一次它就不起作用。单击提交按钮首先触发动作监听器,然后webapp“思考”大约1-2秒,然后重定向到损坏的页面。正常方式之间的区别
localhost:8080 / myContextPath - &gt;点击提交按钮 - &gt;本地主机:8080 / myContextPath
而破碎的方式是,它在地址栏中看起来像这样
localhost:8080 / myContextPath - &gt;点击提交按钮 - &gt;本地主机:8080 / myContextPath /面/ search.xhtml
然后该页面被破坏,导致无法再找到所有javascript和css文件,因为它们是以相对路径引用的。
你有什么想法,哪些问题可能会导致导航错误?
简而言之:第一次加载页面,是index.jsp页面中的一个简单重定向:index.jsp - &gt; jsp:formward - &gt; search.xhtml。然后我点击提交按钮,导航规则重新加载search.xhtml。现在我再次按下提交按钮,现在导航规则不再起作用了。相反,url在地址栏中更改为localhost:8080 // faces / search.xhtml而不是保留在localhost:8080 /。
祝你好运 托拜厄斯
答案 0 :(得分:0)
执行此操作时,实际发生的是您正在向前执行服务器端而不是客户端reDirect,这就是为什么您的地址栏显示“myContextPath” 它已经在“faces / search.xhtml”
下<jsp:forward page="faces/search.xhtml" />
基本上当您单击“导航”时,将规则从/search.xhtml更改为/faces/search.xhtml