对于基于容器管理的表单的身份验证,登录页面位于由a打开的掩盖下,
RequestDispatcher#forward()因此原始请求URI可作为请求属性使用,其名称由标识
RequestDispatcher#FORWARD_REQUEST_URI。请求属性(基本上是请求范围)在JSF中,由提供
ExternalContext#getRequestMap()。
因此,这应该做到:
private String requestedURI;@PostConstructpublic void init() { requestedURI = FacesContext.getCurrentInstance().getExternalContext() .getRequestMap().get(RequestDispatcher.FORWARD_REQUEST_URI); if (requestedURI == null) { requestedURI = "some/default/home.xhtml"; }}public void submit() throws IOException { // ... try { request.login(username, password); externalContext.redirect(requestedURI); } catch (ServletException e) { context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Bad login", null)); }}你只需要做出豆
@ViewScoped(JSF)或
@ConversationScoped代替(CDI)
@SessionScoped(绝对不是
@RequestScoped;与其一起使用,否则不同的方法的需求
<f:param>和
<f:viewParam>)。



