2

背景:私は Struts2 を REST および Convention プラグインと共に使用しているため、設定の約 99% は、xml ファイルではなく、私が作成したクラスにあります。規則を使用すると、メソッドの注釈を使用してサーバー側とクライアント側の検証を構成できます。たとえば、私が使用しているアカウント作成メソッドは次のようになります。

@Validations(
        requiredFields = {
                @RequiredFieldValidator(type = ValidatorType.SIMPLE, fieldName = "userName", message = "You must enter a value for field."),
                @RequiredFieldValidator(type = ValidatorType.SIMPLE, fieldName = "firstName", message = "You must enter a value for field."),
                @RequiredFieldValidator(type = ValidatorType.SIMPLE, fieldName = "lastName", message = "You must enter a value for field."),
                @RequiredFieldValidator(type = ValidatorType.SIMPLE, fieldName = "password", message = "You must enter a value for field.")
        },
        emails = {@EmailValidator(type = ValidatorType.SIMPLE, fieldName = "email", message = "You must enter a value for email.")},
        stringLengthFields = {
                @StringLengthFieldValidator(type = ValidatorType.SIMPLE, trim = true, minLength = "6", maxLength = "16", fieldName = "userName", message = "Username must be at least 6 letters."),
                @StringLengthFieldValidator(type = ValidatorType.SIMPLE, trim = true, minLength = "8", maxLength = "16", fieldName = "password", message = "Password must be at least 8 characters.")
        }
)
public String create() {
    //create the account
}

これはうまく機能します。javascript が JSP に適切にプッシュされ、送信前にフォームが検証され、サーバー側の検証もうまく機能します。すべての条件が満たされると、create()メソッドが適切に呼び出され、すべてが機能します。

問題は、クライアント側の検証がバイパスされ、サーバー側の検証で失敗した場合にあります。すべてのドキュメントは、ユーザーが問題を解決できるように、検証インターセプターが適切なフィールドエラーを設定してユーザーをフォームに送り返すことを示していますが、私のアプリでは、完全に空白のページにリダイレクトするだけです。

質問 - 値を入力して fieldErrors を適切に設定できるように、フォームのリダイレクト先を検証インターセプターに伝えるにはどうすればよいですか?

4

1 に答える 1

0

構成を知らなければ、何が悪かったのかを判断するのは困難です。

私の推測では、アクションの検証インターセプターのみを構成したと思います。例:

// this is wrong
<action name="doSomething" class="DoSomethingAction">
   <interceptor-ref name="validation">
   </interceptor-ref>
</action>

ここでは、検証インターセプターのみが呼び出され、ワー​​クフローなどの他のインターセプターは呼び出されません。

// this is better
<action name="doSomething" class="DoSomethingAction">
   <interceptor-ref name="defaultStack">
   </interceptor-ref>
</action>
于 2013-02-20T10:26:46.403 に答える