認証は、検証ではなく、アクションに属します。IMO。
フィールド自体にXMLまたはアノテーションの検証を使用して、ログインを試行することを検討するかもしれませんvalidate()
が、コードは小さく、どちらの方法でもかなり快適です。
public String execute() {
if (userService.loginValid(username, password) {
return SUCCESS;
}
addActionError(getText("login.failure"));
return FAILURE;
}
フラグを使用するのではなく、フレームワークのアクションレベルのエラーメッセージのサポートを使用します(使用した場合、そのフラグをローカルと複製しません)。実際のログインを行うために注入できるものを使用することを強くお勧めします。テストを簡単にします。
このvalidate()
アプローチを使用すると、物事がかなりタイトになります。
public void validate() {
if (!userService.loginValid(username, password)) {
addActionError(getText("login.failure"));
}
}
あなたが必要とするすべてであるかもしれない合理的な「入力」と「成功」の結果を定義すると仮定します。コードを見ている開発者がフレームワークに精通している場合、validate()
バージョンは比較的明確です。
XMLまたは注釈の検証を使用することに興味がない場合は、手動で行うこともできます。これは間違いなくに属し、validate()
このような一般的なユーティリティメソッドの場合、静的インポートによってコードは比較的簡潔になります。
public void validate() {
boolean tryLogin = true;
if (isBlank(username)) {
addFieldError("username", getText("login.username.required"));
tryLogin = false;
}
if (isBlank(password)) {
addFieldError("password", getText("login.password.required"));
tryLogin = false;
}
if (tryLogin && !userService.loginValid(username, password)) {
addActionError(getText("login.failure"));
}
}
tryLogin
(他の方法でも処理できますが、明らかに失敗するログインのエラーメッセージが表示されないように、フラグを追加しました。ログイン後の処理は省略されています。)