Struts2 Struts 2将表单提交给一个对象

Struts2 Struts 2将表单提交给一个对象,struts2,struts2-spring-plugin,Struts2,Struts2 Spring Plugin,我有类似的想法: class Model { private String field1; private String field2; //setters } class Action extends ActionSupport { private Model model; public String execute() { //breakpoint } public void setModel(Model mod

我有类似的想法:

 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个字段。 我调试了代码,发现实际上两个字段(field1和field2)都调用了setter,但模型类的实例不同

因此,在提交表单时,它将执行以下步骤:

  • 创建模型类的新实例(instance1),在Action类中设置此实例
  • 将field1设置为instance1
  • 创建模型类的新实例(instance2),在Action类中设置此实例
  • 将field2设置为instance2
  • 我看到Instance2替换instance1。 我需要在模型类的一个实例中使用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>
    
    
    com.vercer.engine.persist
    小枝坚持
    1.0.4
    com.opensymphony
    xwork
    2.1.2
    org.apache.struts.xwork
    X工作核心
    2.2.1
    org.freemarker
    自由标记
    2.3.19
    org.springframework
    弹簧网
    3.1.1.1发布
    开放交响乐团
    网站
    2.4.2
    org.apache.struts
    struts2型芯
    2.1.6
    log4j
    log4j
    1.2.16
    码头
    jsp api
    2.1-6.0.2
    org.apache.struts
    struts2弹簧插件
    2.1.6
    org.apache.struts
    struts2 json插件
    2.1.8
    
    对于复杂类型,您需要一个getter和setter,以便Struts2能够正确地操作对象,否则它将无法获取现有实例,并将被迫创建一个新的模型实例(new Model().setwhater()),而不是看到一个模型已经存在并正在执行(getModel().setwhater()).

    配置中有什么有趣的地方吗?插件?拦截器堆栈?正确的依赖项?我添加了依赖项列表。我还使用了SpringStruts集成,每个action类都有@Scope(value=“prototype”)注释,因为这些action是在spring中创建的,您在那里混合了一堆S2和XW2依赖项;首先修复依赖项,使其有意义——您不能随意混合和匹配版本。JSP API应该列为“提供的”。我将JSP API依赖项标记为“提供的”。还有什么吗?是的,我说的关于混合依赖版本的其他话。@Deplake,但仍然修复依赖项--这是自找麻烦。如果这解决了问题,请用绿色复选标记此答案(在左侧的“0”下)。