假设我在JSF托管Bean中执行以下操作:
public String doSomething() {
FacesContext.getCurrentInstance().getExternalContext().getFlash().put("msg", "Something was done successfully");
return "view?faces-redirect=true";
}
我的
view
具有ID为msg
的 anchor 元素。我希望网址具有此 anchor (用于可访问性问题),例如:view.jsf#msg
或我的FacesServlet过滤器模式是什么。
return "view#msg?faces-redirect=true";
显然不起作用,因为JSF(至少是mojarra)将尝试将view#msg
评估为 View 。所以我的问题是如何使JSF最终重定向到带有
#msg
的URL。
最佳答案
because JSF (mojarra at least) will try to evaluate
view#msg
as a view
哦,真讨厌。对于JSF/Mojarra男孩来说,绝对值得提出增强请求。
最好的选择是在
ExternalContext#redirect()
的帮助下手动发送重定向。public void doSomething() throws IOException {
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.getFlash().put("msg", "Something was done successfully");
ec.redirect("view.xhtml#msg");
}
(假设
FacesServlet
映射到*.xhtml
)或者,您可以有条件地渲染一块JS来代替。
<ui:fragment rendered="#{not empty flash.msg}">
<script>window.location.hash = 'msg';</script>
</ui:fragment>
关于redirect - 如何重定向到JSF中的 anchor ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6601642/