5

たとえば、、 、 などのメソッドがあるActionクラスが呼び出されています。UsersActionloginlogoutregister

validate()そして、私は次のようにメソッドを書きました:

@Override
public void validate() {
    if ("".equals(username)) {
        addFieldError("username", getText("username.required"));
    }
    if ("".equals(email)) {
        addFieldError("email", getText("email.required"));
    } else if (!Utils.isValidEmail(email)) {
        addFieldError("email", getText("invalid.email.address"));
    }
    if ("".equals(phone)) {
        addFieldError("phone", getText("phone.required"));
    }
    if ("".equals(password)) {
        addFieldError("password", getText("password.required"));
    }
}

問題は、このソリューションが登録アクションが呼び出された場合にのみ機能することです。とにかく、ログインまたはログアウトでは機能せず、フィールドが null でないか、電子メールが正しいかどうかを確認し、常にエラーが発生します。さて、ログアウトの解決策はその上に注釈を追加することでしたが、ログインには2つのフィールドしかなく、チェックする必要がないことを@SkipValidation伝える方法がわかりません。Struts 2の目的はこれではないため、各アクションのアクションクラスを部分的に記述したくありません。usernamepasswordemailphone

4

2 に答える 2

6

validateMethodNameメソッドを作成します。ここmethodNameで、 はメソッドの名前です。たとえば、

validateLogin() { ... }

それ以外の場合は、何らかの形式のコンテキスト情報をvalidateメソッドに提供してください。

于 2013-06-25T18:29:06.380 に答える
2

アノテーションを使用して、アクション メソッドloginにアノテーションを付けます。

@Action(value="login", results = {
  @Result(name="input", location = "/login.jsp")
},interceptorRefs = @InterceptorRef(value="defaultStack", params = {"validation.validateAnnotatedMethodOnly", "true"}))
@Validations(requiredFields = {
  @RequiredFieldValidator(type = ValidatorType.FIELD, fieldName = "username", message = "${getText("username.required")}"),
  @RequiredFieldValidator(type = ValidatorType.FIELD, fieldName = "password", message = "${getText("password.required")}")
})

フィールドのみを検証usernamepassswordます。他のアクション メソッドも同様です。

参考文献:

于 2013-06-25T19:33:02.023 に答える