我目前正在研究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
可能不是正确的方法。但我不确定如何纠正这个问题。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
经过4个多星期的努力,我终于找到了获得正确URL(而不是之前的URL)的方法。我正在更新我的答案,以防任何其他人遇到同样的问题 -
"在创建和呈现页面时,我们似乎无法使用faces-redirect=true
的方式。它应该以表单操作为后缀。所以我改变了我的代码如下 -
1)点击按钮即可返回操作,例如
public string doAction {
----
return "action?faces-redirect=true";
}
2)更新代码以尽可能使用隐式导航。有了这个,我不需要构建我的自定义viewhandler,因为导航是隐式发生的。所以,我已经废弃了viewhandler。
通过以上两个简单步骤,现在浏览器上正在显示正确的URL。