1

アプリケーションにlogin.jspページがあります。私はStruts2と簡単なvalidate()方法を使用してフォームを検証しています。2つの質問があります:

  1. validate()私のフォームBeanクラスのメソッドはフォームを検証します。つまり、空のフィールドなどをチェックします。ユーザー名とパスワードの組み合わせをチェックする必要がある場合validate()、アクションクラス内またはアクションクラスでこれを行う必要がありますか?

  2. クラスで同じことをしている場合Action、正しい組み合わせは成功ページにつながります。間違った組み合わせで、「間違った組み合わせ」というエラーメッセージとともにJSPページが表示されるようにしたいと思います。リクエストがアクションクラスからのものであることをJSPページでチェックして、エラーメッセージ「Incorrectcombination」を出力できるようにするにはどうすればよいですか。

4

3 に答える 3

1

認証は、検証ではなく、アクションに属します。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(他の方法でも処理できますが、明らかに失敗するログインのエラーメッセージが表示されないように、フラグを追加しました。ログイン後の処理は省略されています。)

于 2013-01-25T22:35:54.040 に答える
0

validateメソッドのログインロジックは絶対に必要ないと思います。それはデータを検証するためのものです。

ログインに失敗した場合は、次のようなアクションでデータプロパティを公開することをお勧めします。

execute () {

   boolean authenticated = login( getUsername(), getPassword() );
   setLoginValid( authenticated );

   if ( authenticated ) 
      result = SUCCESS;
   else 
      result = FAILURE;

   return result;

}

次に、login.jspで、loginValidプロパティのテストを使用して、strutsifタグの不正な資格情報に関するメッセージをラップします。

于 2013-01-25T20:44:05.073 に答える
0

検証フレームワークの目的は、アクションの実行中に予期しないエラーが発生しないように、フィールド値が有効かどうかを確認することです。

検証ロジックをビジネスロジックから分離することをお勧めします。認証は検証ロジックとは何の関係もありません。これは、セキュリティメカニズムによって提供される別個のプロセスです。もちろん、認証を実行するアクションまたはインターセプターを作成することができ、他のアクションと同様に、検証用に構成することができます。

validationStruts2では、インターセプターを適用することでさらに簡素化され、リクエストを処理するジョブの一部になります。より洗練されたシナリオでは、認証はビジネスロジックの一部になりますが、入力フィールドを検証する方法は同じ名前に変更されます。アクションが認証のみである場合は、認証を処理するために検証を必要としない場合があります。

2番目の質問に対して:必要なのはaddActionError(getText("error.key"))、アクションを無効にすることだけです。<s:actionerror>次に、メッセージを表示する結果に戻ります。

さらに重要なのは、検証ロジックをアクションに移動することにした場合でも、検証ロジックは同じままであるということです。この場合、あなたがしなければならない唯一のことは、検証スタックを削除することです。このような検証の唯一の理由は、とは異なる結果を返すことです"input"

于 2013-01-25T21:37:31.863 に答える