0

私はそれに似たものを持っています:

 class Model {
    private String field1;
    private String field2;

    //setters
 }

class Action extends ActionSupport {
    private Model model;
    public String execute() {
        //breakpoint
    }
    public void setModel(Model model){
        this.model=model;
    }
}

jspで:

<s:form id="addCommentForm" method="POST" namespace="%{namespace}" action="addComment">
    <input type="text" name="model.field1"/>
    <input type="text" name="model.field2"/>
</s:form>

残念ながら、このフォームを送信すると、Modelクラスのフィールドが1つだけ設定されます。コードをデバッグすると、実際には両方のフィールド(field1とfield2)に対して、ただしModelクラスの異なるインスタンスに対してセッターが呼び出されていることがわかりました。

したがって、フォームが送信されると、次のステップで実行されるように見えます。

  1. Modelクラスの新しいインスタンス(instance1)を作成し、このインスタンスをActionクラスに設定します
  2. field1をinstance1に設定します
  3. Modelクラスの新しいインスタンス(instance2)を作成し、このインスタンスをActionクラスに設定します
  4. field2をinstance2に設定します

したがって、instanse2がinstance1を置き換えます。Modelクラスの1つのインスタンスにfield1とfield2が必要です。何を変更する必要がありますか?

依存のリスト:

        <dependency>
            <groupId>com.vercer.engine.persist</groupId>
            <artifactId>twig-persist</artifactId>
            <version>1.0.4</version>
        </dependency>
        <dependency>
            <groupId>com.opensymphony</groupId>
            <artifactId>xwork</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts.xwork</groupId>
            <artifactId>xwork-core</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.19</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>3.1.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>opensymphony</groupId>
            <artifactId>sitemesh</artifactId>
            <version>2.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.1.6</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>
        <dependency>
            <groupId>jetty</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1-6.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-json-plugin</artifactId>
            <version>2.1.8</version>
        </dependency>
4

1 に答える 1

2

複雑なタイプの場合、Struts2がオブジェクトを正しく操作できるように、getterとsetterの両方が必要です。そうしないと、既存のインスタンスを取得できず、Modelの新しいインスタンスを作成する必要があります(new Model()。setWhatever())モデルがすでに存在していることを確認して実行するのとは対照的です(getModel()。setWhatever())。

于 2012-05-06T06:02:15.473 に答える