gpt4 book ai didi

jsf - 为什么 getQueryString() 在带有 h :commandButton 的 jsf 支持 bean 中不起作用

转载 作者:行者123 更新时间:2023-12-05 01:07:35 25 4
gpt4 key购买 nike

我在菜单栏顶部构建了一个登录代码片段。如果用户通过导航进入任何页面并突然按下登录按钮,我希望看到该人通过身份验证,同时留在他最初来自的页面上。所以我在支持 bean 上使用了它:

HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();

那么如果说 mypage.htm?a=2&b=2 get a=2&b=2 with the request.getQueryString()

但是 getQueryString 返回 null,我如何才能完全从支持 bean 获得原始 URL?

最佳答案

它返回 null因为命令按钮不会提交到包含查询字符串的 URL。查看 <h:form> 生成的 HTML 输出.你会看到生成的 HTML <form action>根本不包含查询字符串。

您需要自己将当前查询字符串作为登录链接/按钮中的请求参数传递。

获取当前请求 URI 和查询字符串并将其添加为 from登录链接/按钮中的参数(注意:使用普通链接/按钮,它不需要是命令链接/按钮):

<h:button value="login" outcome="/login">
<f:param name="from" value="#{request.requestURI}#{empty request.queryString ? '' : '?'}#{request.queryString}" />
</h:button>

在登录页面,设置 from参数作为 View 范围的 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.
}
}

关于jsf - 为什么 getQueryString() 在带有 h :commandButton 的 jsf 支持 bean 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18370958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com