2017-09-14 141 views
1

我目前正在使用JSF 2.2应用程序。根据要求,我为我的应用程序创建了自定义视图处理程序(使用ViewHandlerWrapper)。所有这些方法都只是路过违约除外的RenderView视图处理它,我重写如下 -faces-redirect = true在创建和呈现视图时不工作

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或互联网给出的答案。但我无法找到如何解决这个问题。

我想我做错了什么,例如在创建视图时可能不是正确的方式。但我不确定可以采取什么措施来纠正此问题。

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

+0

有人可以帮助我吗?我仍然无法解决它。 – Akash

+0

@BalusC ..道歉标记你在!你能评论这里可能不正确吗?我正在尝试从前两个星期,但似乎没有任何工作。 – Akash

回答

0

经过四周多的努力,我终于找到了一种获得正确URL(而不是前一个)的方法。我在这里更新我的答案,以防其他人陷入同样的​​问题 -

“看起来我们不能在创建和渲染页面时使用faces-redirect=true,它应该带有表单操作的后缀。所以我改变了我的代码如下: -

1)动作上的按钮,如

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

2)代码更新尽可能使用隐式导航点击返回有了这个,我没有需要建立自定义视图处理器,因为导航是隐式发生的。所以,我已经放弃了视图处理器。

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

相关问题