gpt4 book ai didi

java - 使用 Cookies 将值保存在 Spring MVC 表单字段中

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:31:40 25 4
gpt4 key购买 nike

假设我有一个像这样的 Spring MVC 表单:

<form:form action="${pageContext.servletContext.contextPath}/secure/main.htm" commandName="secure/main">

<form:input path="operatorId" cssClass="textField"/>

<form:input path="clientId" cssClass="textField"/>

</form:form>

我想做的是将这些字段值存储在 cookie 中,这些值将在其他用户登录系统时保存。它类似于 Remember Me 复选框,但没有复选框。我的 Controller 看起来像这样:

@RequestMapping(method = RequestMethod.POST)
public String processAuthenticate(@Valid AuthenticationForm authenticationForm,
Map<String, Object> model,
HttpServletRequest request,
HttpServletResponse response) {

authenticationForm = (AuthenticationForm) model.get("authenticationForm");

Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
System.out.println(cookie.getValue());
if (cookie.getName().equals("clientId")) {
authenticationForm.setClientId(cookie.getValue());
} else if (cookie.getName().equals("operatorId")) {
authenticationForm.setOperatorId(cookie.getValue());
}
}

String clientId = authenticationForm.getClientId();
String operatorId = authenticationForm.getOperatorId();

Cookie cookieClientId= new Cookie("clientId", clientId);
cookieClientId.setMaxAge(COOKIE_EXPIRY);
response.addCookie(cookieClientId);

Cookie cookieOperatorId = new Cookie("operatorId", operatorId);
cookieOperatorId.setMaxAge(COOKIE_EXPIRY);
response.addCookie(cookieOperatorId);

return MAIN_FORM_MAPPING;
}

但是当我点击按钮并调用这个方法时,我的值没有被保存。这是我第一次尝试使用 Cookies,所以我可能遗漏了什么?我在关注 this SO问题。但就我而言,这是行不通的。任何人都可以建议我解决这个问题?

最佳答案

抱歉误报。我做的一切都正确,但我有一个方法,在每个请求中返回新的 AuthenticationForm 对象作为模型属性,如下所示:

@ModelAttribute("secure/" + MAIN_FORM_MAPPING)
public AuthenticationForm getAuthenticationForm() {
return new AuthenticationForm();
}

我有一个用于在 View 中显示表单的方法:

@RequestMapping(method = {RequestMethod.GET})
public String showForm(Map<String, Object> model, HttpServletRequest request) {
AuthenticationForm authenticationForm = (AuthenticationForm) model.get("secure/main");
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
System.out.println(cookie.getValue());
if (cookie.getName().equals("clientId")) {
authenticationForm.setClientId(cookie.getValue()); //Just added this code to this method
} else if (cookie.getName().equals("operatorId")) {
authenticationForm.setOperatorId(cookie.getValue());
}
}
return MAIN_FORM_MAPPING;
}

然后我意识到这个表单对象总是新的,所以我从 cookie 中设置的值总是在一个新表单上。我必须在 showForm 方法中设置来自 cookie 的值,一切正常。

关于java - 使用 Cookies 将值保存在 Spring MVC 表单字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13173635/

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