2014-11-21 82 views
0

我想有任何页面上这款导航的情况下工作,但我无法找到如何引用一般原始页上的导航规则的标签to-view-id当定义一个导航的情况下,我如何对触发操作的页面进行通用引用?

<navigation-rule> 
     <from-view-id>/public/login/login.xhtml</from-view-id> 
     <navigation-case> 
      <from-action>#{LoginBean.login}</from-action> 
      <from-outcome>success</from-outcome> 
      <to-view-id>/public/login/login.xhtml</to-view-id> 
      <redirect /> 
     </navigation-case> 
    </navigation-rule> 

的情况下转换为:后login.xhtml页面上正确登录,重定向到自我,就是login.xhtml

我想有这样的:

<navigation-rule> 
     <navigation-case> 
      <from-view-id>*</from-view-id> 
      <from-action>#{LoginBean.login}</from-action> 
      <from-outcome>success</from-outcome> 
      <to-view-id>self</to-view-id> 
      <redirect /> 
     </navigation-case> 
    </navigation-rule> 

所以,如果,例如,登录操作从视图ID mypage.xhtml一页被触发时,我得到<to-view-id>mypage.xhtml</to-view-id>,但没有设定<from-view-id>mypage.xhtml</from-view-id>

换句话说特定的导航规则,我想知道是否有是<from-view-id>*</from-view-id>的标签<to-view-id>

等效

我当前的解决方案返回null而不是"success"的结果LoginBean.login当参数redirectToSelfAfterLogin被定义时,操作成功,这使得我在视图中调用该操作。

(我还以为有redirectToAfterLogin参数,默认情况下成功返回null而不是重定向到自我的,但是这是我目前的情况比较实用)

无论如何,我想知道是否也有可能是一个基于faces-config导航规则的解决方案。

回答

2

如果您的意图是重定向到最初请求的页面,您确实不需要设置导航案例。最初请求的页面可作为请求对象的变量,用钥匙javax.servlet.forward.request_uri这是在使用

FacesContext ctxt = FacesContext.getCurrentInstance(); 
    String originalURI = ctxt.getExternalContext().getRequestMap("javax.servlet.forward.request_uri"); //the original uri 

登录豆易于检索如果你真的喜欢,基于导航的配置设置,您可以直接访问在那里的requestScope对象与

<to-view-id>#{requestScope['javax.servlet.forward.request_uri']}</to-view-id> 

但我不会建议;这只是丑陋的。这是决定页面级别的东西,你埋在配置文件

+0

感谢您的意见。我想要一个faces-config重定向的原因是开发团队定义的前两个导航案例是为了在登录操作中取得成果(和错误),因此只需添加第三个导航案例并在同一地点处理每个案例说得通。简单地返回null作为结果也一样,但是渲染条件在''不会被重新评估(因为视图不会改变)。我结束了重定向到'FacesContext.getCurrentInstance()。getRootView()。getViewId()+“?faces-redirect = true”'这得到了同样的结果... – NotGaeL 2014-11-22 14:48:42

+0

..尽管你的解决方案似乎更好。 – NotGaeL 2014-11-22 15:00:11

相关问题