Spring - 使用一个控制器处理多个表单

时间:2009-12-03 09:42:18

标签: java spring spring-mvc

是否可以让一个控制器在弹簧中处理多种形式?

例如,我有3个步骤注册,用“/ register”url映射。是否可以只有一个RegisterController可以处理提交的所有注册步骤?

7 个答案:

答案 0 :(得分:3)

这取决于您使用的控制器的样式。如果您使用Spring 2.0样式的表单控制器(例如SimpleFormControllerAbstractFormController的子类),那么您可能会遇到一些困难。但是,如果你使用Spring 2.5风格的注释@Controller,那么它们非常灵活,你应该能够在一个控制器类中处理你想要的任何复杂性。

答案 1 :(得分:3)

喜欢 skaffman 表示你可以使用非常灵活的@Controller。但是如果你正在编写一个向导,你应该看一下AbstractWizardFormController。它处理向导的所有步骤和验证。它还为每个表单提交保留相同的后备对象。当您的向导处于最终操作时,您可以获取此对象并在数据库中更新它。

你可以找到一个例子: http://www.cs.bham.ac.uk/~aps/syllabi/2004_2005/issws/h04/spring.html#AbstractWizardFormController

答案 2 :(得分:3)

你可以使用多动作控制器。在Spring Single Controller Handle Multiple Method by method name resolver

 <bean id="id" class="controller class"> <property name="name"><ref bean="service Name"/></property > <property
 name="methodNameResolver"><ref bean="name of Resolver"/></property>
 </bean>
 ------------------------------------------------------------------------ <bean id="name of Resolver"
 class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
 <property name="mappings"> <props> <prop
 key="/url.com">MethodName</prop> </props> </property> </bean> This can
 be Help you use single controller
     ------------------------------------------------------------------------

答案 3 :(得分:1)

答案 4 :(得分:1)

<强>问题 例如,我有3个步骤注册,用“/ register”url映射。是否可以只有一个RegisterController可以处理提交的所有注册步骤?

提议的解决方案: Spring 3 - 使用servlet映射到控制器的Spring-mvc控制器。使用您的网址请求中的映射,您将始终转到同一个控制器。

您可以创建一个servlet&amp;通过Spring DispatcherServlet映射到控制器的servlet映射。

创建一个servlet&amp; servlet映射来处理你的请求。

<强> WEB.XML

    <servlet>
    <description>
    </description>
    <display-name>TestServ</display-name>
    <servlet-name>main</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>test</servlet-name>
    <url-pattern>/test/*</url-pattern>
</servlet-mapping>

创建与servlet关联的spring配置文件。

在这种情况下,由于我的servlet名称是test,它将是test-servlet.xml文件,该文件将进入根目录下的WEB-INF文件夹。

<?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">


<bean name="/registration/*" class="register.ResgisterController"/>

创建控制器类以映射您的请求。

package registration;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import registration.User;

@Controller
public final class RegistrationController {

    public RosterController() {

    }

    //Spring lets you You can access your spring mvc model from the controller automatically 
    @RequestMapping
    public void list(Model model) {
        //do something
    }


    //Extract a registration id from the request and you can use in your model
    @RequestMapping
    public void member(@RequestParam("registrationId") Integer id, Model model) {
        //do something
    }
}

答案 5 :(得分:0)

您将不得不使用“MultiActionController”,但如果您将使用此控制器,则验证移植会有一些复杂性。
@ http://www.scribd.com/doc/20156448/Multi-Action-Controller-With-Validation

给出了类似问题的解决方案

答案 6 :(得分:0)

您可以使用Spring webFlow并将控制器注释为@controller