Spring boot 为什么@PostMapping没有';t改变th:如果

Spring boot 为什么@PostMapping没有';t改变th:如果,spring-boot,thymeleaf,Spring Boot,Thymeleaf,我有这样的控制器: @Controller public class AuthController { private final Logger logger= LoggerFactory.getLogger(AuthController.class); private UserService userService; public AuthController(UserService userService) { this.userService = userService; }

我有这样的控制器:

@Controller
public class AuthController {

private final Logger logger= LoggerFactory.getLogger(AuthController.class);

private UserService userService;

public AuthController(UserService userService) {
    this.userService = userService;
}

@GetMapping("login")
public String login(){
    return "auth/login";
}
@GetMapping("/profile")
public String profile(){
    return "auth/profile";
}
@GetMapping("/register")
public String register(Model model){
    model.addAttribute("user",new User());
    model.addAttribute("success",false);
    return "auth/register";
}
@PostMapping("/register")
public String registerNewUser(@Valid User user, BindingResult bindingResult, Model model, RedirectAttributes redirectAttributes){
    if(bindingResult.hasErrors()){
        //show validation errors
        logger.warn("Validation errors were found while registering a new user");
        model.addAttribute("user",user);
        model.addAttribute("validationErrrs",bindingResult.getAllErrors());
        return "auth/register";
    }else{
        User newUser = userService.register(user);
        redirectAttributes
                .addAttribute("id",newUser.getId())
                .addFlashAttribute("success",true);
        logger.info("No validation errors were found while registerning a new user");
        return "redirect:/register";
    }
}
@GetMapping("/activate/{email}/{activationCode}")
public String activate(@PathVariable String email, @PathVariable String activationCode) {
    Optional<User> user = userService.findByEmailAndActivationCode(email,activationCode);
    if( user.isPresent() ) {
        User newUser = user.get();
        newUser.setEnabled(true);
        newUser.setConfirmPassword(newUser.getPassword());
        userService.save(newUser);
        userService.sendWelcomeEmail(newUser);
        return "auth/activated";
    }
    return "redirect:/";
 }
 }
@控制器
公共类授权控制器{
私有最终记录器Logger=LoggerFactory.getLogger(AuthController.class);
私人用户服务;
公共AuthController(用户服务用户服务){
this.userService=userService;
}
@GetMapping(“登录”)
公共字符串登录(){
返回“auth/login”;
}
@GetMapping(“/profile”)
公共字符串配置文件(){
返回“auth/profile”;
}
@GetMapping(“/寄存器”)
公共字符串寄存器(模型){
model.addAttribute(“user”,new user());
model.addAttribute(“成功”,false);
返回“auth/register”;
}
@后映射(“/寄存器”)
公共字符串注册表ernewuser(@Valid User User,BindingResult BindingResult,Model Model,RedirectAttributes RedirectAttributes){
if(bindingResult.hasErrors()){
//显示验证错误
logger.warn(“注册新用户时发现验证错误”);
model.addAttribute(“用户”,用户);
addAttribute(“ValidationErrors”,bindingResult.getAllErrors());
返回“auth/register”;
}否则{
User newUser=userService.register(用户);
重定向属性
.addAttribute(“id”,newUser.getId())
.addFlashAttribute(“成功”,真);
info(“注册新用户时未发现任何验证错误”);
返回“重定向:/register”;
}
}
@GetMapping(“/activate/{email}/{activationCode}”)
公共字符串激活(@PathVariable字符串电子邮件,@PathVariable字符串激活代码){
可选用户=userService.findByEmailAndActivationCode(电子邮件、activationCode);
if(user.isPresent()){
User newUser=User.get();
newUser.setEnabled(true);
newUser.setConfirmPassword(newUser.getPassword());
userService.save(newUser);
userService.sendWelcomeEmail(newUser);
返回“auth/activated”;
}
返回“重定向:/”;
}
}
我调用方法registerNewUser,并且我的记录器始终显示关于“注册新用户时未发现验证错误”的信息,因为执行了else主体。所以在我看来,redirectAttributes.addFlashAttribute(“success”,true);应该能正常工作。 不幸的是,当我返回“redirect:/register”时,我得到了新的视图,但没有allert依赖于“success”atribute。 这是我的视图代码的一部分:

<div class="row" th:if="${success}">
<div class="col-md-3"></div>
<div class="col-md-6 alert alert-success" role="alert" >
    You have successfully registered with us. Please check your email to 
activate your account.
</div>
<div class="col-md-3"></div>
</div>

<!-- User Registration form -->
<form class="form-horizontal" role="form" method="POST" 
th:action="@{/register}" th:object="${user}" th:if="!${success}">
<div class="row">

您已成功向我们注册。请检查您的电子邮件至
激活你的帐户。

有人可以帮我找出缺少警报的原因吗?

registerNewUser()
中,您正在重定向到
GET/register
。这将调用以下方法:

@GetMapping(“/register”)
公共字符串寄存器(模型){
model.addAttribute(“user”,new user());
model.addAttribute(“成功”,false);
返回“auth/register”;
}
在这个方法中,您添加了一个模型属性
success
,并将其设置为
false
,有效地覆盖了重定向属性

由于
RedirectAttributes
用于填充重定向目标的
Model
,因此可以将
Model.addAttribute(..)
调用包装在
if
语句中。例如:

@GetMapping(“/register”)
公共字符串寄存器(模型){
model.addAttribute(“user”,new user());
如果(!model.containsAttribute(“成功”)){
model.addAttribute(“成功”,false);
}
返回“auth/register”;
}
或者,您可以不使用model属性,因为解析器足够聪明,可以在缺少该属性时将
${success}
计算为
false
。例如:

@GetMapping(“/register”)
公共字符串寄存器(模型){
model.addAttribute(“user”,new user());
返回“auth/register”;
}

这应该行得通,您能否向我们展示
GET/register
映射(=实际返回视图的映射)的控制器映射?更新的描述将其添加到模型中,方法与您在if的错误部分中所做的相同。model.addAttribute(“成功”,true)