使用JSF导航到上一页

时间:2014-06-13 09:42:00

标签: jsf omnifaces

我使用支持bean,我可以保存表单并导航到此页面。

public String saveHere() {
    return Faces.getViewId() + "?faces-redirect=true&includeViewParams=true";
}

如何使用OmniFaces导航到上一页? 我的保存操作应该导致我有“编辑”按钮的页面。 通常是列表视图(非常项旁边的编辑按钮) 或其他页面(带有此项目的编辑按钮)

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要从某个地方导航的页面ID。初看起来,将它保存在Session中似乎是一个好主意,但是,如果您在多选项卡中导航(通过不同的浏览器选项卡共享相同的Http会话),这可能仍然保留在coflict中。

话虽如此,对于您的案例,最合适的解决方案是将视图参数传递给您的版本视图,告诉您来自哪里。这应该就这么简单:

<h:button outcome="edit" value="Edit registry">
    <f:param name="pageFrom" value="#{view.viewId}" />
</h:button>

之后,在您的版本视图中将此参数绑定到您的bean:

<f:metadata>
    <f:viewParam name="pageFrom" value="#{editBean.pageFrom}" />
</f:metadata>

只需在保存后重定向到 EditBean.java 中的该视图,假设它是@ViewScoped

public String saveHere() {
    //save here
    return pageFrom + "?faces-redirect=true&includeViewParams=true";
}

这是达到你要求的最直接的方式。但是,您必须考虑您来自哪里的页面仍然是一个视图参数,因此最终用户可以在那里键入他想要的内容。通过这种行为,他可以实现重定向到其他页面而不是预期的页面。如果您想避免这种情况,请使用the flash scope代替查看参数。

另见: