gpt4 book ai didi

jsp - Spring MVC返回要在 View 中显示的服务层错误代码

转载 作者:行者123 更新时间:2023-12-03 08:32:08 25 4
gpt4 key购买 nike

我目前正在开发一个登录更改密码部分,其中的验证由为用户注册的身份验证策略驱动。

我有以下 Controller ,该 Controller 调用身份验证服务,该服务将检查密码是否与用户身份验证策略设置的所有规则匹配:

    @RequestMapping(value = "/changepw", method = RequestMethod.POST)
public String changePw(@RequestParam(value = "username") final String username,
@Valid @ModelAttribute("changePw") final ChangePasswordForm changePasswordForm, final BindingResult errors) {
this.log.debug("Entering password change");
try {
final LoginResult result = this.authService.changePassword(changePasswordForm.getUsername(),
changePasswordForm.getOldPassword(), changePasswordForm.getNewPassword1(), changePasswordForm.getNewPassword2());
this.log.debug("login result: {}", result);
if (result.getResultCode() == CODE.ERROR) {
this.log.error(result.getErrorMessage());
errors.reject(result.getErrorMessage());
return "redirect:/login/changepw/";
}
if (result.getResultCode() == CODE.SUCCESS) {
return "redirect:/login/login";
}
errors.reject("error.login.unknown.error");
return "redirect:/login/changepw/";
} catch (final Exception e) {
errors.reject("error.login.catch.error");
return "redirect:/login/changepw";
}
}

我的LoginResult基本上只是一个bean
public class LoginResult implements Serializable {

private static final long serialVersionUID = 6058401105878015102L;

public enum CODE {
SUCCESS,
ERROR,
CHANGE_PASSWORD
}

private CODE resultCode;
private String errorMessage;
//constructors getters setters.

方法changePassword基本上返回 CODE.SUCCESS,nullCODE.ERROR, error.whatever.code
现在我想做的是将error.code显示在我的jsp的第一个输入上方的div中。

这是我的jsp:
<form:form commandName="changePw"  method="POST">
<form:errors cssClass="errorBlock" element="div"/>
<div class="form_block">
<form:label path="username"><spring:message code="prompt.label.username"/></form:label>
<form:input path="username"/>
</div>
<div class="form_block">
<form:label path="oldPassword"><spring:message code="prompt.label.oldpassword"/></form:label>
<form:password path="oldPassword"/>
<div class="capsLockImage control" id="capsLockImage1" title="<spring:message code="prompt.caps_lock"/>"></div>
</div>
<div class="form_block">
<form:label path="newPassword1"><spring:message code="prompt.label.newpassword1"/></form:label>
<form:password path="newPassword1"/>
<div class="capsLockImage control" id="capsLockImage2" title="<spring:message code="prompt.caps_lock"/>"></div>
</div>
<div class="form_block">
<form:label path="newPassword2"><spring:message code="prompt.label.newpassword2"/></form:label>
<form:password path="newPassword2"/>
<div class="capsLockImage control" id="capsLockImage3" title="<spring:message code="prompt.caps_lock"/>"></div>
</div>
<input type="submit" value="<spring:message code="prompt.label.changepw"/>"/>

到目前为止,该错误已在BindingResult中注册,但不会返回 View 。使该工作最佳的做法是什么?

最佳答案

发生这种情况是因为您将重定向到 View -并且存储在BindingResult中的错误会丢失。

如果发生错误,最好还是返回到changepw View -例如:

if (result.getResultCode() == CODE.ERROR) {
this.log.error(result.getErrorMessage());
errors.reject(result.getErrorMessage());
return "changepw"; // Or whatever the jsp view is called
}

如果您无法执行此操作,则必须将错误存储在 session 中,以便重定向请求返回后即可使用。

为此,您可以在更高版本的Spring中显式使用 HttpSessionRedirectAttributes-如本文所解释: Spring - Redirect after POST (even with validation errors)

关于jsp - Spring MVC返回要在 View 中显示的服务层错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20282217/

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