faces-redirect = true在创建和呈现视图时不起作用

时间:2017-09-14 14:06:44

标签: jsf jsf-2.2

我目前正在研究JSF 2.2应用程序。根据要求,我为我的应用程序创建了自定义视图处理程序(使用ViewHandlerWrapper)。所有方法都只是传递给默认视图处理程序,除了renderView,我将覆盖如下 -

private viewHandler viewHandlerWrapped = null;

renderView(FacesContext facesContext, UIViewRoot viewToRender) {
      String viewId = viewToRender.getViewId();
      if (viewId == some condition) {
          /* Do calculation to derive viewId */
      }
      UIViewRoot viewRoot = viewHandlerWrapped.createView(facesContext,viewId+"?faces-redirect=true");
      facesContext.setViewRoot(viewRoot);
      //now let system render the view
      viewHandlerWrapped.renderView(facesContext,viewRoot);
    }

以上工作正常并且渲染&导航按预期发生。唯一的问题是faces-redirect=true无效。 URL似乎总是落后。

我在stackoverflow或互联网上给出了很多答案。但我无处可寻找如何解决这个问题。

我认为我做错了,例如创建视图时,?faces-redirect=true可能不是正确的方法。但我不确定如何纠正这个问题。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

经过4个多星期的努力,我终于找到了获得正确URL(而不是之前的URL)的方法。我正在更新我的答案,以防任何其他人遇到同样的问题 -

"在创建和呈现页面时,我们似乎无法使用faces-redirect=true的方式。它应该以表单操作为后缀。所以我改变了我的代码如下 -

1)点击按钮即可返回操作,例如

public string doAction {
----
return "action?faces-redirect=true";
}

2)更新代码以尽可能使用隐式导航。有了这个,我不需要构建我的自定义viewhandler,因为导航是隐式发生的。所以,我已经废弃了viewhandler。

通过以上两个简单步骤,现在浏览器上正在显示正确的URL。