Spring - обрабатывать несколько форм отправки с одним контроллером - PullRequest
2 голосов
/ 03 декабря 2009

Можно ли иметь один контроллер для обработки нескольких форм весной?

Например, у меня есть 3 шага регистрации, которые сопоставляются с URL-адресом "/ register". Возможно ли иметь только один RegisterController, который может обрабатывать все шаги регистрации при регистрации?

Ответы [ 7 ]

3 голосов
/ 03 октября 2012

Вы можете использовать контроллер мультидействия. В Spring Single Controller Метод Генделя Multipal по имени метода 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 голосов
/ 03 декабря 2009

Как и Скаффман сказал, что вы можете использовать очень гибкий @Controller. Но если вы пишете Wizard, вы должны взглянуть на AbstractWizardFormController. Он обрабатывает все шаги и проверки мастера. Он также сохраняет один и тот же объект поддержки для каждой отправки формы. Когда ваш мастер выполняет последнее действие, вы можете взять этот объект и обновить его в базе данных.

Пример можно найти по адресу: http://www.cs.bham.ac.uk/~aps/syllabi/2004_2005/issws/h04/spring.html#AbstractWizardFormController

3 голосов
/ 03 декабря 2009

Это зависит от стиля используемых контроллеров. Если вы используете контроллеры форм в стиле Spring 2.0 (например, подкласс SimpleFormController или AbstractFormController), то у вас могут возникнуть некоторые трудности. Однако, если вы используете аннотированные @Controller s в стиле Spring 2.5, то они очень гибкие, и вы должны быть в состоянии справиться практически со всеми необходимыми вам комплексностями в одном классе контроллеров.

1 голос
/ 03 октября 2012

Вопрос Например, у меня есть 3 шага регистрации, которые сопоставляются с URL-адресом "/ register". Возможно ли иметь только один RegisterController, который может обрабатывать все шаги регистрации при регистрации?

Предлагаемое решение: Spring 3 - контроллер Spring-mvc, использующий отображение сервлета на ваш контроллер. Используя отображение в вашем URL-запросе, вы всегда будете переходить к одному и тому же контроллеру.

Вы можете создать отображение сервлета и сервлета, которое отображается на ваш контроллер через пружинный DispatcherServlet.

Создайте отображение сервлета и сервлета для обработки ваших запросов.

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>

Создать файл конфигурации пружины, связанный с сервлетом.

В этом случае, поскольку имя моего сервлета - 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
    }
}
1 голос
/ 19 декабря 2009
0 голосов
/ 06 декабря 2009

вы можете использовать Spring webFlow и комментировать свой контроллер как @ controller

0 голосов
/ 03 декабря 2009

вам придется использовать ' MultiActionController ', но при переносе проверки есть некоторые сложности, если вы будете использовать этот контроллер.
Дано решение аналогичной проблемы @ http://www.scribd.com/doc/20156448/Multi-Action-Controller-With-Validation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...