-1

Struts2 では、validateメソッドはメソッドの前に呼び出されexecuteます。validateしかし、なぜメソッドのフィールド値を変更できないのでしょうか?

4

2 に答える 2

4

特定のメソッドは、1 つのことを行う必要があります。validate()メソッドはデータを検証する必要があります。データを修正しようとするのではなく、正しいかどうかを確認する必要があります。検証の結果は、単純に合格または不合格でなければなりません。それ以外のことをしている場合は、やりすぎです。

(これは Struts に固有のものではありません。これは検証の一般的な意味です。IMO です。)

于 2013-09-04T06:24:29.237 に答える
3

@jon Skeet に強く同意します。validate() メソッドは検証のみを行うためのものです。

しかし、@prtk_shah の質問に答えるために、ActionSupport クラスの validate() メソッドを使用している場合は、次の例を使用して、validate メソッドのフィールド値を変更できることを追加したいと思います。

public class LoginAction extends ActionSupport{
private String userName;
private String password;
//getter setter
@Override
    public void validate() {
        super.validate();
        if(getUserName()==null){
            setUserName("abc");
        }

    }
}

デフォルトでは、validate() メソッドは「入力」文字列を返しますが、結果が struts.xml の「入力」にマップされている場合は、次のコードを使用して、welcome.jsp のフィールド値を取得できます。

<s:property value="userName"/>

注:上記の例は、質問で尋ねたことを達成するために使用できますが、validate() メソッドは検証目的でのみ使用されます。

于 2013-09-04T07:21:24.947 に答える