2017-10-14 55 views
2

私はspring-bootアプリケーションを持っています。Thymeleafです。私はかなり基本的なシナリオを持っています。フォームがあり、ユーザーが送信ボタンをクリックすると、フォームデータはコントローラに送信されますが、同じページ内のに成功メッセージが表示されます。Thymeleaf:送信ボタンをクリックすると、成功メッセージが表示されます

:ポスト要求に答えるために

@GetMapping("/suggest-event") 
    public String suggestEvent(
      @RequestParam(value = "message", required = false) String message) { 

     model.addAttribute("message",message); 
     return "/suggested-event/suggestEvent"; 
    } 

をし、その後方法:

<form th:action="@{/suggest-event}" method="post"> 
     <button type="submit" class="btn btn-primary">Submit</button> 
</form> 
<div th:switch="${message}"> 
     <div th:case="'Success'" class="alert alert-success"> 
       <strong>Success!</strong> Operation performed successfully. 
     </div> 
     <div th:case="'Failed'" class="alert alert-danger"> 
       <strong>Failure!</strong> Operation failed. Please try again 
     </div> 

</div> 

iは、コントローラに以下の方法を使用するフォームをロードするには:

フォームは非常に簡単です

@PostMapping("/suggest-event") 
    public String receiveSuggestedEvent(RedirectAttributes redirectAttributes) { 

     redirectAttributes.addAttribute("message", "Success"); 
     return "redirect:/suggest-event"; 
    } 

問題は、成功メッセージは常に存在することです(ページが読み込まれるとき最初に、私がフォームを提出する前に)。どうすれば修正できますか?

答えて

1

あなたは、コードを少し変更することができます。HTMLでメッセージを表示する

@GetMapping("/suggest-event") 
public String suggestEvent() { 
    return "/suggested-event/suggestEvent"; 
} 

@PostMapping("/suggest-event") 
public String receiveSuggestedEvent(BindingResult result, RedirectAttributes redirectAttributes) { 
    redirectAttributes.addFlashAttribute("message", "Failed"); 
    redirectAttributes.addFlashAttribute("alertClass", "alert-danger"); 
    if (result.hasErrors()) { 
     return "redirect:/suggest-event"; 
    } 
    redirectAttributes.addFlashAttribute("message", "Success"); 
    redirectAttributes.addFlashAttribute("alertClass", "alert-success"); 
    return "redirect:/suggest-event"; 
} 

私のソリューション:

<div th:if="${message}" th:text="${message}" th:class="${'alert ' + alertClass}"/> 

をしかし、一番下の行は、addFlashAttributeを交換する代わりに、addAttributeからメッセージを削除しています@ GetMapping。

関連する問題