它返回null
是因为命令按钮未提交到包含查询字符串的 URL。查看生成的 HTML 输出<h:form>
。您会看到生成<form action>
的 HTML 根本不包含查询字符串。
您需要自己将当前查询字符串作为登录链接/按钮中的请求参数传递。
获取当前请求 URI 和查询字符串并将其作为from
参数添加到登录链接/按钮中(注意:使用普通链接/按钮,它不需要是命令链接/按钮):
<h:button value="login" outcome="/login">
<f:param name="from" value="#{request.requestURI}#{empty request.queryString ? '' : '?'}#{request.queryString}" />
</h:button>
在登录页面中,将from
参数设置为视图范围的 bean 属性:
<f:metadata>
<f:viewParam name="from" value="#{login.from}" />
</f:metadata>
在登录操作方法中,重定向到它:
public void submit() throws IOException {
User user = userService.find(username, password);
if (user != null) {
// ... Do your login thing.
FacesContext.getCurrentInstance().getExternalContext().redirect(from);
} else {
// ... Do your "unknown login" thing.
}
}