2017-10-13 10 views
0

私は単純なパスワードリセットフォーム画面を持っています。ユーザーが[Recover]ボタンを使用して送信すると、ページはhttp://localhost:8080/api/v1/accountmanagement/user/password_resetに送信されます。そのエンドポイントでは、ユーザの電子メールが検証され、電子メールを介してシステムによってユーザに送信されるリンクに連結されたハッシュが生成される。すべてうまく動作しますが、私は何が起こるかは、ユーザーが復元ボタンをクリックしたときに、復元用のパスワードページに残しておきたいことです。私がしようとしているのは、「あなたのパスワード要求の回復などを提出していただきありがとうございます。 divを表示することは問題ではありません(プレーンなJavaScriptを使用している可能性があります - 私はjsフレームワークを持っていないかもしれません - たぶんjQueryを使用しています)、ユーザーがリカバリボタンをクリックするとポストリクエストが残りのAPI表示されているページを変更します。ポストリクエストを送信しても、spring mvcを使用してページに残ります

target="_blank"を追加しようとしましたが、機能しませんでした。私のフロントエンドはhtmlとthymeleafでのみ書かれています。

私はただ欠落しているという単純な解決策があるかもしれません。

resetPassword.html

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" lang="en"> 
<head> 
<title>Reset Password</title> 
<link href="css/main.css" rel="stylesheet" /> 

</head> 

<div> 
    <h2> Recover your password</h2> 
    <p> 
     To recover your password follow the instructions below to reset your password. 
    </p> 
</div> 

<form th:action="@{/api/v1/accountmanagement/user/password_reset}" method="post" id="resetPasswordForm" th:object="${account}" target="_blank"> 
    <div id="field_email"> 
     <label for="email">Enter your email address : </label> 
     <p>Enter the email address with your account.</p> 
     <div > 
      <input type="text" id="email" name="email" th:field="*{email}" /> 
     </div> 
    </div> 

    <div id ="successRecover" style="display: none;"> 
     An email has been sent to your email address. The email contains instructions to reset your password. 
    </div> 
    <div th:if="${param.error}" class="login-panel_error error"> 
     Error. 
    </div> 
    <div> 
     <button type="submit" class="btn-primary"> 
      <i class="fa fa-spin fa-spinner hidden"></i> 
      <span>Recover</span> 
     </button> 
    </div> 
</form> 

PasswordManagementController.ja VA

@Controller 
    @RequestMapping("/api/v1/accountmanagement") 

    public class PasswordManagementController { 
     @Autowired 
     private PasswordResetService passwordResetService; 

     private Logger LOG = LoggerFactory.getLogger(this.getClass()); 

     @RequestMapping(value = "/user/password_reset", method = RequestMethod.POST) 
     public ResponseEntity processResetPassword(@ModelAttribute(value = "account") Account account, BindingResult result, 
       HttpServletRequest request) { 
      LOG.info("account email " + account.getEmail()); 

      // build the hash here for hashUrl 

      if (account != null) { 
       if (!StringUtil.isBlank(account.getEmail())) { 
        try { 
         passwordResetService.processResetPassword(account, hashUrl); 
        } catch (AccountConfigException ace) { 
         // deal with exception here. 
         // return 
        } catch (Exception e) { 
         // deal with exception here. 
         // return 
        } 
        return new ResponseEntity(HttpStatus.OK); 
       } else { 
        // deal with an exception here. 
        // return 
       } 
      } else { 
       // deal with an exception here. 
       // return 
      } 
     } 
    } 
+1

ページ/フォームを提出しているなぜ、サーバーをヒットするAJAXを使用することを検討し、それを使用して、応答を返します。 javascript正しいdivを表示/非表示にします。 –

答えて

0

あなたが実際にリダイレクトされます成功した要求の場合でResponseEntityを返却している場合。 エラーの処理方法はわかりませんが、コントローラメソッドの戻り値の型をStringに変更することをお勧めします。このようにして、booleanの値をsuccessRecover divをレンダリングするモデルに渡している間に、正常な応答の場合は同じページにリダイレクトでき、Javascriptは必要ありません。

新しいハンドラ:ビュー内

@RequestMapping(value = "/user/password_reset", method = RequestMethod.POST) 
public String processResetPassword(@ModelAttribute(value = "account") Account account, Model model) { 
    // build the hash here for hashUrl 
    try { 
     passwordResetService.processResetPassword(account, hashUrl); 
    } catch (AccountConfigException ace) { 
     // deal with exception here. 
     // return 
    } catch (Exception e) { 
     // deal with exception here. 
     // return 
    } 
    model.addAttribute("isOK", true); 

    return "index"; 
} 

そして:

<div id="successRecover" th:if="${isOK}"> 
    An email has been sent to your email address. The email contains instructions to reset your password. 
</div> 
関連する問題