我们目前正在将EE6 / JSF应用程序从部署路径someserver.com/app
移动到其自己的子域app.someserver.com
。
大多数事情都在顺利进行,但我们遇到了意外的问题,即网络层如何处理现在基本上不存在的上下文根。
我们发现并早期修复的一件事是我们设置的cookie的路径从"/app"
缩短为""
,因此只能在服务器上的每个文件夹中读取,而不是整个应用程序。
我们现在发现了一个类似的问题,我们在JSF中生成超链接:
<a href="#{request.contextPath}">Go to home page</a>
以前呈现为href="/app"
并且工作正常,但现在href=""
链接可以理解为不再有效。我希望它说href=""/"
。
有一个优雅的解决方案吗?
请注意,我们还有表格链接
<a href="#{request.contextPath}/projects">Go to projects page</a>
,所以简单地用"/"
替换空的上下文路径是不够的。
我错过了一些明显的东西吗?我看到了一个解释here(符合我们的经验),但没有详细说明可能的解决方案。
答案 0 :(得分:1)
原来我没有想清楚。我非常专注于修复#{request.contextPath}
产生的字符串,我错过了我在整个时间里错误地使用它。
最简单的解决方案是使用
<a href="#{request.contextPath}/">...</a>
(带斜杠)到达应用程序的根目录,永远不要使用href="#{request.contextPath}"
而不使用斜杠。
这解决了这两种情况。如果将应用程序部署到“some_folder”,则链接将变为"some_folder/"
。如果将应用程序部署到服务器根目录,则链接将变为"/"
。
希望这可以帮助那些偶然陷入困境的人。