Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF登录转发地址栏/url——重定向无法解决问题_Url_Jsf_Redirect_Navigation_Address Bar - Fatal编程技术网

JSF登录转发地址栏/url——重定向无法解决问题

JSF登录转发地址栏/url——重定向无法解决问题,url,jsf,redirect,navigation,address-bar,Url,Jsf,Redirect,Navigation,Address Bar,好的,我们有一个单点登录,用户可能会进入www.blabla.com/AppName/访问我们的网站。然后,我们定义一个欢迎站点,使用phaselistener检查: 用户正在尝试访问欢迎站点吗?是->尝试登录-有效吗?是->获取用户角色->转发到此特定用户的相应站点 例如,用户niceBelly进入page/where/in/many/folders/beer.jsf,用户barbie进入/boots/pink.jsf 由于某些原因,此应用程序中无法重定向 结果是,当到达例如pagepink.

好的,我们有一个单点登录,用户可能会进入www.blabla.com/AppName/访问我们的网站。然后,我们定义一个欢迎站点,使用phaselistener检查:

用户正在尝试访问欢迎站点吗?是->尝试登录-有效吗?是->获取用户角色->转发到此特定用户的相应站点

例如,用户niceBelly进入page/where/in/many/folders/beer.jsf,用户barbie进入/boots/pink.jsf 由于某些原因,此应用程序中无法重定向

结果是,当到达例如pagepink.jsf时,地址栏仍然显示blablaba.com/AppName/ 单击第一个链接将导致浏览器使用表单地址作为新URL,例如在welcome.jsf上,我导航到coolstuff.jsf。在coolstuff页面上,我现在有了最后一个表单的url,例如welcome.jsf。然后在coolstuff上,我点击一个链接,在下一页上获得coolstuff作为url,依此类推


有办法解决这个问题吗?

鉴于这些症状,您实际上不是在重定向请求,而是在转发请求。当你打电话时,会发生真正的重定向

externalContext.redirect(url);
在JSF上下文中,或者在添加

<redirect />

到导航案例。所有其他方法都有效地向前推进。根据症状,您正在使用commandlinks而不是outputlinks导航到其他页面。Commandlinks将向当前URL提交一个POST请求,当导航案例不包含
时,JSF将在封面下使用
RequestDispatcher
设置请求/响应的目的地。转发不会指示浏览器对目标URL发出新的GET请求,因此浏览器地址栏中的URL不会更改。真正的重定向正好可以做到这一点

另见:

    • 鉴于这些症状,您实际上并没有重定向请求,而是在转发请求。当你打电话时,会发生真正的重定向

      externalContext.redirect(url);
      
      在JSF上下文中,或者在添加

      <redirect />
      
      
      
      到导航案例。所有其他方法都有效地向前推进。根据症状,您正在使用commandlinks而不是outputlinks导航到其他页面。Commandlinks将向当前URL提交一个POST请求,当导航案例不包含
      时,JSF将在封面下使用
      RequestDispatcher
      设置请求/响应的目的地。转发不会指示浏览器对目标URL发出新的GET请求,因此浏览器地址栏中的URL不会更改。真正的重定向正好可以做到这一点

      另见:

      你说得对。。。我写了重定向,意思是转发。我转发的原因是,首先,它不适用于重定向:-),但让我们假设我以某种方式成功地实现了业务,有没有办法将导航案例结果转换为实际正确的页面重定向?问题不是“如果登录然后欢迎”,而是“如果登录somelogic->Output”将
      添加到
      faces config.xml
      中的导航案例中,不要使用commandlinks(POST)进行简单的页到页导航,只需使用outputlinks(GET)。如果您需要对GET请求执行一些业务操作/预加载,只需在托管bean的构造函数或后构造函数中执行该操作。当您使用JSF2.0时,这就容易多了。例如,它支持将结果转换为真实URL的
      。。。我写了重定向,意思是转发。我转发的原因是,首先,它不适用于重定向:-),但让我们假设我以某种方式成功地实现了业务,有没有办法将导航案例结果转换为实际正确的页面重定向?问题不是“如果登录然后欢迎”,而是“如果登录somelogic->Output”将
      添加到
      faces config.xml
      中的导航案例中,不要使用commandlinks(POST)进行简单的页到页导航,只需使用outputlinks(GET)。如果您需要对GET请求执行一些业务操作/预加载,只需在托管bean的构造函数或后构造函数中执行该操作。当您使用JSF2.0时,这就容易多了。例如,它支持将结果转换为真实URL的