6

この文字列をトリミングする最善の方法は何ですか?/トリミング コードを配置するのに最適な場所はどこですか?

jsp に次のテキスト フィールドがあるとします。

<s:textfield label="First Name" name="person.firstname"/>

アクションクラス:

public class BaseAction extends ActionSupport implements ServletRequestAware, SessionAware {
    private Person person;
    // Getters, setters and action logic
}

豆:

public class Person implements Serializable {
    private String lastname;
    private String firstname;
    // Getters and setters
}

Bean のデフォルト設定を変更できますが、これはハックのようです。

public void setFirstname(String firstname) {
    this.firstname = firstname.trim();
}

編集:私はこの質問も見ました: struts2は、フォームから取得したすべての文字列をトリムします.「正しい」方法はインターセプターを使用することでもあると示唆されています.

インターセプターが「正しい」方法なのはなぜですか? Bean のセッターを変更することの何が悪いのでしょうか?

4

2 に答える 2

6

これは、 Struts2 コンバーターで実行できます。

public class TrimmingStringConverter extends StrutsTypeConverter {

    public Object convertFromString(Map ctx, String[] values, Class arg2) {
        if (values != null && values.length > 0) {
            return values[0].trim();
        }

        return null;
    }

    public String convertToString(Map ctx, Object o) {
        if (o != null) {
            return o.toString();
        }
        else {
            return null;
        }
    }

    public Object convertValue(Map context, Object o, Class toClass)
    {
        if (o == null) {
            return null;
        } else if (toClass == java.lang.String.class) {
            if (o instanceof String[]) {
                String[] os = (String[]) o;

                if (os.length > 0) {
                    return os[0].trim();
                }
            }

            return o.toString().trim();
        }

        return super.convertValue(context, o, toClass);
   }
}

xwork-conversion.properties に登録する必要があります: java.lang.String=es.jogaco.webapp.TrimmingStringConverter

これは、すべてのユーザー入力に適用されます。

デフォルトの struts2 インターセプターがあれば機能します。struts2 doc から引用:

デフォルトでは、変換インターセプターはデフォルト スタックの struts-default.xml に含まれています。

さらに、struts2 アプリで動作しています。

于 2012-10-20T14:27:18.653 に答える
3

短い答えはNot by default です。これを行うためのメカニズムは組み込まれておらず、アクションクラスでそれを行う必要があるか、ある種の Java スクリプトがそれを行います。

他の可能な方法は、除外するオプションまたは同様のトレッキングのようなものを使用してこれを行うためのインターセプターを作成することです。

インターセプターはこれを行うための良い方法だと思います.そのようなインターセプターがS2に付属している方が良いです.

于 2012-09-13T16:36:56.457 に答える