支柱 2 将表单提交到一个对象



我有类似的东西:

 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>

不幸的是,当我提交此表单时,模型类中仅设置了 1 个字段。我调试代码,发现实际上为两个字段(字段 1 和字段 2)调用了 setter,但针对 Model 类的不同实例。

因此,在提交表单时,它似乎执行了后续步骤:

  1. 创建模型类的新实例(实例 1),在操作类中设置此实例
  2. 将字段 1 设置为实例 1
  3. 创建模型类的新实例(实例 2),在操作类中设置此实例
  4. 将字段 2 设置为实例 2

因此,正如我所看到的,instanse2 替换了实例 1。我需要模型类的一个实例中的字段 1 和字段 2。需要修改什么?

依赖列表:

        <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>

对于复杂类型,您需要一个getter和setter,以便Struts2可以正确操作对象,否则它将无法获取现有实例,并将被迫创建一个新的模型实例(new Model().setWhatever()),而不是看到模型已经存在并执行(getModel().setWhatever())。

相关内容

  • 没有找到相关文章

最新更新